我正在尝试借助 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 中使用它。
据我所知,该错误抱怨的是颁发者,而不是证书。您应该获取颁发者证书(可能是中间证书或根证书),如果它们不在您的受信任存储中,您应该获取链中直到根证书的所有证书。
请将pem文件重命名为cer文件,然后在Windows中双击。您将在“详细信息”选项卡中看到“颁发者”字段,您应该从 LDAP 服务器提供商处获取该颁发者证书。您可能需要一个包含所有证书链的单个文件。然后,这些证书应安装在运行代码的受信任存储中。您可以在代码运行时在 CAPI2 日志事件查看器 - 应用程序和服务 - Microsoft - Windows -CAPI2 - 可操作中跟踪这些链验证事件。首先您应该启用日志,它很快就会填满。