如何使用UnboundID SDK通过SSL服务器证书连接到LDAP服务器?

2024-07-03

我手里有一个 SSL LDAP 服务器证书。我想用它通过 UnboundID SDK 连接到 LDAP 服务器。

我不想使用 com.unboundid.util.ssl.TrustAllTrustManager,如下所示:使用 UnboundID SDK 和 SSL 证书文件连接到 Android 应用程序中的 LDAP 服务器 https://stackoverflow.com/questions/11893608/using-unboundid-sdk-with-an-ssl-certificate-file-to-connect-to-ldap-server-in-an

以下 TrustManager 不符合我们的产品要求:

com.unboundid.util.ssl.PromptTrustManager
com.unboundid.util.ssl.HostNameTrustManager
com.unboundid.util.ssl.ValidityDateTrustManager

我不想要任何用户交互,以及我在验证证书颁发者的 TrustManager 上方的列表中错过的内容。

另外,我不想在任何密钥库中插入 LDAP 服务器证书,因此我无法使用以下命令 信托经理:

com.unboundid.util.ssl.WrapperKeyManager
com.unboundid.util.ssl.PKCS11KeyManager
com.unboundid.util.ssl.KeyStoreKeyManager

我想做类似下面代码的事情:

CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate cert = cf.generateCertificate(byteArrayInputStream);
SSLUtil sslUtil = new SSLUtil(new CertificateTrustManager(cert));
SSLSocketFactory socketFactory = sslUtil.createSSLSocketFactory();
LDAPConnection connection = new LDAPConnection(socketFactory,
     "server.example.com", 636);

请注意,UnboundID SDK 中不存在 CertificateTrustManager。 怎么可能做到呢?


我找到了解决方案使用 UnboundID SDK 和 SSL 证书文件连接到 Android 应用程序中的 LDAP 服务器 https://stackoverflow.com/questions/11893608/using-unboundid-sdk-with-an-ssl-certificate-file-to-connect-to-ldap-server-in-an and 如何将 .cer 证书导入 java 密钥库? https://stackoverflow.com/questions/4325263/how-to-import-a-cer-certificate-into-a-java-keystore(帕特里克·M 的回答)。

现在我可以从 UI 获取证书并通过 SSL 连接到 LDAP :)

import com.unboundid.ldap.sdk.LDAPConnection;
import com.unboundid.util.ssl.SSLUtil;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import java.io.ByteArrayInputStream;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;

String base64EncodedCertificateString = "...";
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(base64EncodedCertificateString.getBytes());
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
int i = 0;
while (byteArrayInputStream.available() > 0) {
    Certificate cert = cf.generateCertificate(byteArrayInputStream);
    trustStore.setCertificateEntry("cert " + i++, cert);
}

TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
tmf.init(trustStore);
TrustManager[] trustManagers = tmf.getTrustManagers();
SSLUtil sslUtil = new SSLUtil(trustManagers);
SSLSocketFactory socketFactory = sslUtil.createSSLSocketFactory();
LDAPConnection connection = new LDAPConnection(socketFactory);
connection.connect("place.myserver.com", 636);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用UnboundID SDK通过SSL服务器证书连接到LDAP服务器? 的相关文章

随机推荐

  • 如何快速从 webView 获取 URL

    我有一个问题 如何从webView 我执行以下代码并得到nil 我正在尝试的代码 override func viewWillAppear animated Bool super viewWillAppear true webView lo
  • 如何快速从 webView 获取 URL

    我有一个问题 如何从webView 我执行以下代码并得到nil 我正在尝试的代码 override func viewWillAppear animated Bool super viewWillAppear true webView lo
  • 处理多个图形适配器和显示器

    我正在尝试决定是否在我的应用程序中支持多个适配器 显示器 而不是将我的窗口锁定到主适配器和主显示器 我对此有很多疑问 因为我从未使用过具有多个显卡的系统 当存在多个显卡时 Windows 桌面如何表现 如果两张卡都运行自己的一组监视器 是否
  • 处理多个图形适配器和显示器

    我正在尝试决定是否在我的应用程序中支持多个适配器 显示器 而不是将我的窗口锁定到主适配器和主显示器 我对此有很多疑问 因为我从未使用过具有多个显卡的系统 当存在多个显卡时 Windows 桌面如何表现 如果两张卡都运行自己的一组监视器 是否
  • 将 float 重载到 numpy 数组

    我有一个函数 处理一维 numpy 数组 如下所示 def f arr arr asarray arr process data as numpy array return arr With asarray我允许使用列表调用该函数f 4 5
  • 将 float 重载到 numpy 数组

    我有一个函数 处理一维 numpy 数组 如下所示 def f arr arr asarray arr process data as numpy array return arr With asarray我允许使用列表调用该函数f 4 5
  • XML 序列化注释

    我遇到过这样的情况 我不想修改一个 xml 文件 XElement 类中的 AddAnnotation 函数提供了一个选项来添加仅内存数据 该数据未序列化且不是 XML 的一部分 我希望能够保存这些注释 例如 保存到另一个 xml 文件 然
  • XML 序列化注释

    我遇到过这样的情况 我不想修改一个 xml 文件 XElement 类中的 AddAnnotation 函数提供了一个选项来添加仅内存数据 该数据未序列化且不是 XML 的一部分 我希望能够保存这些注释 例如 保存到另一个 xml 文件 然
  • Seaborn FacetGrid PointPlot 添加 1 条网格线

    鉴于以下情况 import seaborn as sns attend sns load dataset attention sns set style whitegrid axes grid False axes edgecolor no
  • Seaborn FacetGrid PointPlot 添加 1 条网格线

    鉴于以下情况 import seaborn as sns attend sns load dataset attention sns set style whitegrid axes grid False axes edgecolor no
  • R:从 magrittr 到本机管道的转换以及函数的翻译

    请查看帖子末尾的 reprex 由于各种原因 我正在从 gt 过渡到本机管道 有时我会有点困难 我需要对几个功能进行一些评论 在第一种情况下 使用 gt 重写complete data 函数 我不明白为什么我的某些方法有效而另一种方法无效
  • R:从 magrittr 到本机管道的转换以及函数的翻译

    请查看帖子末尾的 reprex 由于各种原因 我正在从 gt 过渡到本机管道 有时我会有点困难 我需要对几个功能进行一些评论 在第一种情况下 使用 gt 重写complete data 函数 我不明白为什么我的某些方法有效而另一种方法无效
  • 使用 Oracle 进行数据库源控制

    我几个小时以来一直在寻找一种将数据库签入源代码管理的方法 我的第一个想法是一个用于计算数据库差异的程序 并要求所有开发人员将他们的更改作为新的差异脚本来实现 现在 我发现如果我可以将数据库转储到文件中 我可以将其签入并将其用作另一种类型的文
  • 使用 Oracle 进行数据库源控制

    我几个小时以来一直在寻找一种将数据库签入源代码管理的方法 我的第一个想法是一个用于计算数据库差异的程序 并要求所有开发人员将他们的更改作为新的差异脚本来实现 现在 我发现如果我可以将数据库转储到文件中 我可以将其签入并将其用作另一种类型的文
  • PHP 包含和图像不适用于重写的网址

    编辑短网址的 htaccess 文件后 现在我的页面已损坏 并且 php 包含的文件和图像无法工作 这是我在 public html 中的 htaccess RewriteRule car name car php name 1 L QSA
  • PHP 包含和图像不适用于重写的网址

    编辑短网址的 htaccess 文件后 现在我的页面已损坏 并且 php 包含的文件和图像无法工作 这是我在 public html 中的 htaccess RewriteRule car name car php name 1 L QSA
  • 使用扩展函数将字符串中的每个单词大写

    我想在 Kotlin 中创建一个扩展函数 将字符串中每个单词的第一个字母转换为大写 the quick brown fox to The Quick Brown Fox 我尝试使用capitalize 方法 只能通过将第一个字母大写Stri
  • 使用扩展函数将字符串中的每个单词大写

    我想在 Kotlin 中创建一个扩展函数 将字符串中每个单词的第一个字母转换为大写 the quick brown fox to The Quick Brown Fox 我尝试使用capitalize 方法 只能通过将第一个字母大写Stri
  • 如何使用UnboundID SDK通过SSL服务器证书连接到LDAP服务器?

    我手里有一个 SSL LDAP 服务器证书 我想用它通过 UnboundID SDK 连接到 LDAP 服务器 我不想使用 com unboundid util ssl TrustAllTrustManager 如下所示 使用 Unboun
  • 如何使用UnboundID SDK通过SSL服务器证书连接到LDAP服务器?

    我手里有一个 SSL LDAP 服务器证书 我想用它通过 UnboundID SDK 连接到 LDAP 服务器 我不想使用 com unboundid util ssl TrustAllTrustManager 如下所示 使用 Unboun