python访问AD域ldap安全连接

  最近整python操作ad域,找到了python中有相应的第三方库ldap,分为两种模式:安全连接636端口和非安全连接389端口,非安全连接可以执行添加操作,但是添加的用户密码为空,如果需要修改密码需要在安全连接下,安全连接则需要导入证书。

  硬件环境:Windows Server2019+python

1、AD域安装证书服务

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 这里需要安装上最基本的证书颁发机构,证书颁发机构Web注册也可以勾选,勾选上可以在客户端使用web注册申请证书的方式即可完成证书申请,不勾选的话需要在域控上添加证书即可。

 

 

 

 

 

编辑证书服务,创建企业CA

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

中途设置根据自己的需要进行修改

 

 

 进入证书颁发机构可以查看已办发的证书。

3.域控上配置证书(注,本步骤和第四步可以达到同样的目的,即使第三步不做第四步也会在域控上添加上证书)

Win+R输入mmc,添加/删除管理单元,选择 证书,安装到本地计算机,确定即可

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 此时会弹出证书界面,在个人证书有一个域控计算机名称的证书,此时可以尝试编写代码进行安全连接,如果不行,参考微软连接进行本地证书下载。

web访问http://<server IP/name>/certsrv 需要使用IE浏览器,

 

 

 

 

 

 

如果弹出为了完成证书注册,必须奖该CA的网站配置为使用HTTPS身份验证,或者进入之后CSP选项一直显示正在加载或者显示为空,需要设置IE的模式

 

 IE设置->Internet选项,找到连接到AD域的相应区域,选择自定义级别

 

 将几项设置为启用,此时window会报有风险,可以在证书申请完毕之后 恢复设置。

 

 

 

 如果出现一下提示信息,可以继续提交申请:

 

 填写信息如下:

 

 提交申请之后即可安装证书。

证书模板选择,可以根据自己的需要进行选择,不同模板可以在AD域服务器的证书颁发机构--证书模板,查看不同的区别。

 

 注

目前企业CA可以完成安全连接,独立CA一致提示远程连接被关闭,暂时还没有找到解决方案,如有大神可以赐教,万分感谢。

本文章是在虚拟机上搭建了一个AD服务器,只是个人的看法和见解,如有不足之处,请多多包涵,也希望有大神能够指导一些原理或者不同的解决方案。

附:测试源代码

from ldap3 import Server, ALL, NTLM, Connection

def adConnection(AD_Server, admin_user, admin_passwd):
    try:
        server = Server(host=AD_Server, get_info=ALL)  # 默认端口389
        conn = Connection(server, user=admin_user, password=admin_passwd, auto_bind=True, authentication=NTLM)
        if conn.bind():
            print(AD_Server, "---AD域登陆成功")
            print(conn)
            return conn
        else:
            print(AD_Server, "---AD域登陆失败")
            print(conn)
            print(conn.result)
    except Exception as e:
        print("连接失败,连接告警")
        print(e)


def adConnection_ssl(AD_Server, AD_admin_user, AD_admin_passwd):
    try:
        server = Server(host=AD_Server, port=636, use_ssl=True, get_info=ALL)  # 默认端口389
        conn = Connection(server, user=AD_admin_user, password=AD_admin_passwd, auto_bind=True, authentication=NTLM)
        if conn.bind():
            print(AD_Server, "---AD域登陆成功")
            print(conn)
            return conn
        else:
            print(AD_Server, "---AD域登陆成功")
            print(conn.result)
    except Exception as e:
        print("连接失败,连接告警")
        print(e)


if __name__ == '__main__':
    conn = adConnection_ssl(AD_Server, AD_admin_user, AD_admin_passwd)
    print(conn)
View Code

运行结果:

 

 


参考连接:

https://blog.csdn.net/qq_33997198/article/details/105297121 

https://docs.microsoft.com/zh-cn/troubleshoot/windows-server/windows-security/add-san-to-secure-ldap-certificate

https://www.cnblogs.com/haiya2019/p/10627730.html

https://ldap3.readthedocs.io/en/latest/

posted @ 2022-04-01 13:57  九离  阅读(1693)  评论(0编辑  收藏  举报