python - 使用 python-ldap 在 LDAP 中查询 userCertificate 属性
问题描述
我正在尝试使用 python-ldap 库查询“userCertificate;binary”属性。目的是使用他自己的证书对用户进行身份验证。我的代码如下所示:
# 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”属性而不是证书然后将检索到的 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
推荐阅读
- tinymce - 如何将 TinyMCE 默认格式选项设置为项目符号格式
- spring-boot - Junits 未使用最新的 Spring Boot 版本运行
- tensorflow - Google Colab 内存不足
- c - C 信号没有按照它们发送的相同顺序被捕获(或根本没有被捕获)
- json - 使用 shell 脚本从 json 数组中提取最大值
- python - 在 webdiver 会话之后,Selenium 节点不会杀死进程
- python-3.x - TLV(类型长度值)数据包
- javascript - 如何处理基于不同 ES 版本的多个 Webpack 构建?
- python - 在 pandas 中使用列名加入
- jquery - 防止机器人向公共 Web 服务发送垃圾邮件