使用 python-ldap 查询 LDAP 以获取用户证书属性



我正在尝试查询"用户证书;二进制"属性,使用 python-LDAP 库。目的是使用用户自己的证书对用户进行身份验证。我的代码看起来像这样:

# Search parameters
searchScope = ldap.SCOPE_SUBTREE
searchFilter = "userCertificate;binary="+str(certificate)
retrieveAttributes = None
#Searching LDAP entry
result  = con.search_s(ldap_base,searchScope,searchFilter,retrieveAttributes)

这将从 ldap 返回"错误的搜索过滤器"异常。

问题: 如何制定这样的查询?

谢谢。

编辑:我找到了解决此问题的方法,但问题仍然存在,我将对实际问题进行更多研究。

我设法通过搜索证书的条目"cn"属性 unstead 来绕过这个问题,然后将检索到的 DER 证书转换为 PEM 格式并将其与请求 PEM 证书进行比较,这样非 utf-8 DER 编码就不会有任何问题。我的代码如下所示。

# Reading certification request
crt_request = request.form["certificate"]
crt_request = str.encode(crt_request)
# Search parameters
cn = request.form["cn"]
searchScope = ldap.SCOPE_SUBTREE
searchFilter = "cn=*"+cn+"*"
retrieveAttributes = None
#Searching LDAP entry
result  = con.search_s(ldap_base,searchScope,searchFilter,retrieveAttributes)
if( not result) :
return jsonify("Entry not found"),401
#Getting DER certificate and converting it to PEM
der_cert = result[0][1]
der_cert = der_cert.get("userCertificate;binary")[0]
try : 
certificate = x509.load_der_x509_certificate(der_cert,default_backend())
crt = certificate.public_bytes(serialization.Encoding.PEM)
except ldap.LDAPError:
return jsonify("Bad certification format"),401
if(crt == crt_request ) :
return jsonify(crt),200
else :
return jsonify("Unvalid certificate"),401

最新更新