python - SecurityError: 无法建立到“EOF 违反协议 (_ssl.c:841)”的安全连接
问题描述
我正在尝试连接到 Neo4j,但我不断收到此错误。我试过
from neo4j.v1 import GraphDatabase
driver = GraphDatabase.driver(uri="bolt://localhost:7687", auth=("neo4j", "12345"))
但是当我尝试连接时出现此错误
SecurityError: 无法建立到“EOF 违反协议 (_ssl.c:841)”的安全连接
当我输入http://localhost:7474/browser/时,我可以连接到浏览器
这是完整的错误日志:
-------------------------------------------------- ------------------------- SSLEOFError Traceback(最近一次调用最后)~\AppData\Roaming\Python\Python36\site-packages\neobolt\direct .py in _secure(s, host, ssl_context, **config) 853 try: --> 854 s = ssl_context.wrap_socket(s, server_hostname=host if HAS_SNI and host else None) 855 除了 SSLError 作为原因:
c:\program files\python36\lib\ssl.py in wrap_socket(self, sock, server_side, do_handshake_on_connect, suppress_ragged_eofs, server_hostname, session) 406 server_hostname=server_hostname, --> 407 _context=self, _session=session) 408
c:\program files\python36\lib\ssl.py in init (self, sock, keyfile, certfile, server_side, cert_reqs, ssl_version, ca_certs, do_handshake_on_connect, family, type, proto, fileno, suppress_ragged_eofs, npn_protocols, ciphers, server_hostname, _context, _session) 813 raise ValueError("do_handshake_on_connect 不应为非阻塞套接字指定") --> 814 self.do_handshake() 815
c:\program files\python36\lib\ssl.py in do_handshake(self, block)
1067 self.settimeout(None) -> 1068 self._sslobj.do_handshake() 1069 最后:c:\program files\python36\lib\ssl.py in do_handshake(self) 688 """开始 SSL/TLS 握手。""" --> 689 self._sslobj.do_handshake() 690 if self.context.check_hostname :
SSLEOFError: EOF 发生违反协议 (_ssl.c:841)
上述异常是以下异常的直接原因:
1 ----> 2 driver = GraphDatabase.driver(uri="bolt://localhost:7687", auth=("neo4j", "12345")) 中的 SecurityError Traceback (最近一次调用最后一次)
~\AppData\Roaming\Python\Python36\site-packages\neo4j__init__.py in driver(cls, uri, **config) 118 :class:
.Driver
子类实例直接。119 """ --> 120 返回驱动程序(uri, **config) 121 122~\AppData\Roaming\Python\Python36\site-packages\neo4j__init__.py in new (cls, uri, **config) 159 用于驱动程序中的子类。subclasses (): 160 if parsed_scheme in subclass.uri_schemes: --> 161 return subclass(uri, **config) 162 raise ValueError("URI scheme %r not supported" % parsed.scheme) 163
~\AppData\Roaming\Python\Python36\site-packages\neo4j__init__.py in new (cls, uri, **config) 233 234 pool = ConnectionPool(connector, instance.address, **config) --> 235 pool。 release(pool.acquire()) 236 instance._pool = pool 237 instance._max_retry_time = config.get("max_retry_time", default_config["max_retry_time"])
~\AppData\Roaming\Python\Python36\site-packages\neobolt\direct.py in acquire(self, access_mode) 713 714 def acquire(self, access_mode=None): --> 715 return self.acquire_direct(self.address ) 716 717
~\AppData\Roaming\Python\Python36\site-packages\neobolt\direct.py in acquire_direct(self, address) 606 if can_create_new_connection: 607 try: --> 608 connection = self.connector(address, error_handler=self.connection_error_handler ) 609 除了 ServiceUnavailable: 610 self.remove(address)
~\AppData\Roaming\Python\Python36\site-packages\neo4j__init__.py in connector(address, **kwargs) 230 231 def connector(address, **kwargs): --> 232 return connect(address, **dict (config, **kwargs)) 233 234 pool = ConnectionPool(connector, instance.address, **config)
~\AppData\Roaming\Python\Python36\site-packages\neobolt\direct.py in connect(address, **config) 970 raise ServiceUnavailable("Failed to resolve address for %s" % address) 971 else: -->第972章
~\AppData\Roaming\Python\Python36\site-packages\neobolt\direct.py in connect(address, **config) 961 host = address[0] 962 s = _connect(resolved_address, **config) --> 963 s, der_encoded_server_certificate = _secure(s, host, security_plan.ssl_context, **config) 964 connection = _handshake(s, address, der_encoded_server_certificate, **config) 965 例外为错误:
~\AppData\Roaming\Python\Python36\site-packages\neobolt\direct.py in _secure(s, host, ssl_context, **config) 857 error = SecurityError("无法建立到 {!r} 的安全连接"。格式(cause.args[1]))858 错误。Cause = Cause --> 859 raise error 860 else: 861 # 检查服务器是否提供了证书
SecurityError: 无法建立到“EOF 违反协议 (_ssl.c:841)”的安全连接
解决方案
我为可能有同样问题的人找到了解决方案。您需要添加encrypted=False
.
代替
from neo4j.v1 import GraphDatabase
driver = GraphDatabase.driver(uri="bolt://localhost:7687", auth=("neo4j", "12345"))
它应该是:
driver = GraphDatabase.driver(uri="bolt://localhost:7687", auth=("neo4j", "12345"), encrypted=False)
希望这会对某人有所帮助
推荐阅读
- c# - C# EndsWith 有时会给出错误的结果
- java - 嗨,为什么我的 try 块正在跳过并且控制最终会阻塞而不给出任何异常?
- ios - 使用 Apple 奇怪行为登录 / React Native
- flutter - 有没有办法从 Flutter 中的 Image 创建或保存 svg 文件?
- jestjs - 如何测试根据useEffect中的状态变化渲染的子组件
- xml - 如何使用 PL/SQL 修改 XML 目标文件的标头?
- asp.net - 我可以禁用用户帐户的登录并且仍然可以进行模拟吗?
- python - 如何将 dataclass_json 中的 field_name 选项用于嵌套字典
- css - 带有可滚动 tbody 的引导响应表?
- azure - 用于特定权限集的 Blob 存储的 Azure 角色