我正在尝试在我的 Android 应用程序中连接到 LDAP 服务器,并且正在使用 UnboundID SDK。最近,从不安全的 LDAP 更改为安全的 LDAP,我必须相应地更改应用程序。我已获得要验证的 SSL 证书文件。我已经使用该文件创建了一个密钥库,如此处所述。我在我的应用程序的资产文件夹中有这个密钥库文件,并且正在从中提取。下面的代码目前不起作用,并引发异常:
LDAPException(resultCode=01 (connect error), errorMessage=('尝试连接服务器时发生错误 place.myserver.com:636: javax.net.ssl.SSLHandShakeException: java.security.cert.CertPathValidatorException: Trust anchor for找不到认证路径
// code from above link
AssetManager assetManager = getApplicationContext().getAssets();
InputStream keyStoreInputStream = assetManager.open("yourapp.store");
KeyStore trustStore = KeyStore.getInstance("BKS");
trustStore.load(keyStoreInputStream, "myPassword".toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
tmf.init(trustStore);
// my code
SSLUtil sslUtil = new SSLUtil(tmf.getTrustManagers());
LDAPConnection connection = new LDAPConnection(sslUtil.createSSLSocketFactory());
connection.connect("place.myserver.com", 636);
但是,代码段:
SSLUtil sslUtil = new SSLUtil(new TrustAllTrustManager());
LDAPConnection connection = new LDAPConnection(sslUtil.createSSLSocketFactory());
connection.connect("place.myserver.com", 636);
确实有效(尽管我被高层告知这是不安全的)。我不太确定我在这里做错了什么,所以任何帮助将不胜感激。另外,如果有比我上面尝试做的更好的方法来完成这个,请随时告诉我:) 不过我想坚持使用 UnboundID 库,因为其余代码已经使用同样,如果我使用 TrustAllTrustManager,一切正常。