You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET中如何为启用TLS的容器化OpenLDAP配置LdapConnection

容器化OpenLDAP的TLS/SSL连接配置问题

我部署了容器化的OpenLDAP服务器,当设置TLS/SSL为false运行容器时,C# 7.0代码可以正常连接:

无TLS的容器启动命令

sudo docker run \
    --name openldap-server \
    --rm \
    --publish 389:389 \
    --hostname my.ldap.server.org \
    --env LDAP_ORGANISATION="My LDAP organization" \
    --env LDAP_DOMAIN="my.ldap.server.org" \
    --env LDAP_BASE_DN="dc=my,dc=ldap,dc=server,dc=org" \
    --env LDAP_ADMIN_PASSWORD="test" \
    --volume /data/slapd/database:/var/lib/ldap \
    --volume /data/slapd/config:/etc/ldap/slapd.d \
    --env LDAP_TLS=false \
    --detach osixia/openldap:latest

正常连接的C#代码

var ldapConnection = new LdapConnection(new LdapDirectoryIdentifier(serverIp, 389))
{
    AuthType = AuthType.Basic
};
ldapConnection.SessionOptions.ProtocolVersion = 3;

string username = "uid=test,ou=person,dc=my,dc=ldap,dc=server,dc=org", password = "test";
ldapConnection.Bind(new NetworkCredential(username, password));

但启用TLS/SSL重启容器后,我无法通过C#代码正常连接:

启用TLS的容器启动命令

sudo docker run \
    --name openldap-server \
    --rm \
    --publish 636:636 \
    --hostname my.ldap.server.org \
    --env LDAP_ORGANISATION="My LDAP organization" \
    --env LDAP_DOMAIN="my.ldap.server.org" \
    --env LDAP_BASE_DN="dc=my,dc=ldap,dc=server,dc=org" \
    --env LDAP_ADMIN_PASSWORD="test" \
    --volume /data/slapd/database:/var/lib/ldap \
    --volume /data/slapd/config:/etc/ldap/slapd.d \
    --volume /data/certificates:/container/service/slapd/assets/certs \
    --env LDAP_TLS_CRT_FILENAME=server.crt \
    --env LDAP_TLS_KEY_FILENAME=server.key \
    --env LDAP_TLS_CA_CRT_FILENAME=ca.crt \
    --detach osixia/openldap:latest

当前尝试的C#代码(未成功)

var ldapConnection = new LdapConnection(new LdapDirectoryIdentifier(serverIp, 636))
{
    AuthType = AuthType.Basic
    // AuthType = AuthType.Negotiate
};
ldapConnection.SessionOptions.SecureSocketLayer = true;

// var serverCrt = File.ReadAllText("<my certificate directory>/server.crt");
// var serverKey = File.ReadAllText($"<my certificate directory>/server.key");
// var serverCertificate = X509Certificate2.CreateFromPem(serverCrt, serverKey);
// var serverCertificate = X509Certificate.CreateFromCertFile("<my certificate directory>/server.crt");
// var caCertificate = new X509Certificate("<my certificate directory>/ca.crt");

// connection.SessionOptions.VerifyServerCertificate = new VerifyServerCertificateCallback((connection, serverCertificate ) => true);
// connection.SessionOptions.VerifyServerCertificate = delegate { return true; };

ldapConnection.SessionOptions.ProtocolVersion = 3;

ldapConnection.Bind(new NetworkCredential("uid=test,ou=person,dc=my,dc=ldap,dc=server,dc=org", "test"));

我需要解决两个问题:

  1. 当OpenLDAP服务器需要服务器证书和CA证书时,如何配置C#代码中的LdapConnection以通过TLS/SSL连接?我不想将证书安装在主机上,因为代码会运行在容器中,证书是运行时挂载的。
  2. 我怀疑证书生成有误:服务器证书的*Common Name(CN)*为my.ldap.server.org,但CA的CN是OpenLDAP容器宿主机的用户名(容器内用户名不同),这是否会导致连接失败?

内容的提问来源于stack exchange,提问作者HasQuestionsAndAnswers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:52:55