我正在为具有自签名证书的公司代理提供支持。我已经对此进行了广泛的记录。
现在的问题是TLS / SSL模块无法正确加载,甚至无法验证证书。
python -c "import ssl"
我可以在Anaconda Prompt中使用它,但不能在Git Bash中使用它。为什么有区别?
我首先进行了最新版本(在撰写本文时)Anaconda发行版2018.12的基本安装,然后尝试安装redis
。
$ pip install redis
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Collecting redis
Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/redis/
...
Could not fetch URL https://pypi.org/simple/redis/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/redis/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping
Could not find a version that satisfies the requirement redis (from versions: )
No matching distribution found for redis
这很奇怪。 SSLError("Can't connect to HTTPS URL because the SSL module is not available.")
。因此,我尝试仅导入ssl
。
$ python -c "import ssl"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Users\username\AppData\Local\Continuum\anaconda3\lib\ssl.py", line 98, in <module>
import _ssl # if we can't import it, let the error propagate
ImportError: DLL load failed: The specified procedure could not be found.
(base) C:\Users\username> python -c "import ssl"
(base) C:\Users\username>
没有错误。只是一个空行。
(base) C:\Users\username> conda deactivate
C:\Users\username>
C:\Users\username> python -c "import ssl"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Users\username\AppData\Local\Continuum\anaconda3\lib\ssl.py", line 98, in <module>
import _ssl # if we can't import it, let the error propagate
ImportError: DLL load failed: The specified procedure could not be found.
停用基本conda环境后,我可以在Anaconda Prompt中复制错误。
显然,_ssl.pyd
中的C:\Users\username\AppData\Local\Continuum\anaconda3\DLLs
文件确实可以工作,但是我缺少某些东西,或者不知道如何进一步调试以弄清楚为什么它在Git Bash中不起作用。
我不了解如何调试python如何加载DLL以及Anaconda环境如何对此产生影响。
答案 0 :(得分:0)
由于git bash似乎与众不同,因此我尝试将其从2.19.0
更新为2.20.1
,现在它可以在Git Bash中使用。
这很奇怪,因为两个版本都配置为使用Windows安全通道后端进行TLS / SSL。
[http]
sslBackend=schannel
https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.20.0.txt
自v2.19起更新
用户界面,工作流程和功能
- 在具有最新cURL库,http.ssl后端配置的平台上 变量可用于在运行时选择其他SSL后端。 Windows端口使用此机制在OpenSSL和 通过HTTPS协议进行通话时确保安全通道。
性能,内部实施,开发支持等
- 改进了Windows端口上DLL的加载方式。
这些似乎是Git Bash中唯一可能引起此问题的更改。我以为它使用的是Windows Secure Channel,但也许以前使用的是Git Bash OpenSSL并将其更新指向schannel
或者,如何将msys终端仿真器加载到DLL中。
答案 1 :(得分:-1)
也许这会有所帮助。来自public interface UserEventRepository extends JpaRepository<UserEvent, Long> {
List<UserEvent> findAllByUserId(Long userId);
@Query(value = "SELECT user_id FROM user_event ue " +
"WHERE ue.user_id = :userId", nativeQuery = true)
List<Long> findUserIdByEventId(@Param("userId") Long userId);
}