Python ldap3 错误:[SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:1006)

问题描述 投票:0回答:1

我正在尝试借助 Mac M1 上的 ldap3 库从 python 框架连接到 ldap 服务器。

from ldap3 import Server, Connection, SUBTREE, ALL, Tls, MODIFY_REPLACE
from fastapi import FastAPI
from typing import Union
from pydantic import BaseModel
import ssl

app = FastAPI()

tls_configuration = Tls(validate=ssl.CERT_REQUIRED,version=ssl.PROTOCOL_TLSv1_2,ca_certs_file="./app/client_cert.pem")
server = Server("ldaps://ldaps.adserver.com",port=636,use_ssl=True,tls=tls_configuration, get_info=ALL)
conn = Connection(server, user='mydomain.com\user', password='DemoPass%',auto_bind=True,authentication="NTLM")
print(f"Connection: {conn}")

我已使用以下命令提取证书,并将 --Begin Certificate-- 到 --End Certificate-- 保存在应用程序文件夹中的 .pem 格式文件中。

openssl s_client -connect ldaps.adserver.com:636

尝试测试连接时,我仍然收到证书无效错误。

Traceback (most recent call last):
  File "/Users/demo/Documents/GitHub/project/app/main.py", line 13, in <module>
    conn = Connection(server, user='domain\user', password='DemoPass%',auto_bind=True,authentication="NTLM")
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/demo/anaconda3/lib/python3.11/site-packages/ldap3/core/connection.py", line 363, in __init__
    self._do_auto_bind()
  File "/Users/demo/anaconda3/lib/python3.11/site-packages/ldap3/core/connection.py", line 387, in _do_auto_bind
    self.open(read_server_info=False)
  File "/Users/demo/anaconda3/lib/python3.11/site-packages/ldap3/strategy/sync.py", line 57, in open
    BaseStrategy.open(self, reset_usage, read_server_info)
  File "/Users/demo/anaconda3/lib/python3.11/site-packages/ldap3/strategy/base.py", line 146, in open
    raise exception_history[0][0]
ldap3.core.exceptions.LDAPSocketOpenError: ("('socket ssl wrapping error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1006)',)",)

如何验证我创建的 .pem 文件是否有效以及如何在 python ldap3 中使用它。

python openssl active-directory ssl-certificate ldap3
1个回答
0
投票

据我所知,该错误抱怨的是颁发者,而不是证书。您应该获取颁发者证书(可能是中间证书或根证书),如果它们不在您的受信任存储中,您应该获取链中直到根证书的所有证书。

请将pem文件重命名为cer文件,然后在Windows中双击。您将在“详细信息”选项卡中看到“颁发者”字段,您应该从 LDAP 服务器提供商处获取该颁发者证书。您可能需要一个包含所有证书链的单个文件。然后,这些证书应安装在运行代码的受信任存储中。您可以在代码运行时在 CAPI2 日志事件查看器 - 应用程序和服务 - Microsoft - Windows -CAPI2 - 可操作中跟踪这些链验证事件。首先您应该启用日志,它很快就会填满。

© www.soinside.com 2019 - 2024. All rights reserved.