- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试通过 ssl 连接到 ldap 服务器,我获得了服务器证书并按如下方式安装了它:
keytool -keystore cacerts -importcert -alias ldapCert -file LdapCert.cer
我收到了证书已成功安装的消息,我可以使用以下命令验证证书是否已安装:
keytool -list -keystore cacerts
我可以在可信证书列表中找到我的证书。
这是我连接到 ldap 服务器的方式:
String host = "server.ip.here;
String userDN = "CN=myuser,OU=EmployeesOU,OU=MainOU,dc=mydomain,dc=net";
String userPassword = "mypassword";
boolean ssl = true;
public static LdapContext connectToLdap(String host,
String userDN, String userPassword,
boolean ssl) throws Exception {
System.out.println("connectToLdap");
String hostPrefix = "ldap";
String ldapPort = "389";
if (ssl) {
hostPrefix = "ldaps";
ldapPort = "636";
}
String providerUrl = hostPrefix + "://" + host + ":" + ldapPort;
//System.out.println("####### LDAP URL: " + providerUrl);
LdapContext ldapContext;
Hashtable<String, String> ldapEnv = new Hashtable<String, String>(11);
ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
ldapEnv.put(Context.PROVIDER_URL, providerUrl);
ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
ldapEnv.put(Context.SECURITY_PRINCIPAL, userDN);
ldapEnv.put(Context.SECURITY_CREDENTIALS, userPassword);
ldapEnv.put("com.sun.jndi.ldap.read.timeout", 1000 * 10 + "");
if (ssl) {
ldapEnv.put(Context.SECURITY_PROTOCOL, "ssl");
}
ldapEnv.put(Context.REFERRAL, "ignore");
try {
ldapContext = new InitialLdapContext(ldapEnv, null);
System.out.println("success connection to ldap");
return ldapContext;
} catch (Exception e) {
System.out.println("failure connection to ldap");
e.printStackTrace();
return null;
}
}
从 cmd 安装证书并尝试运行应用程序后,我仍然遇到异常:
javax.naming.CommunicationException: simple bind failed: server.ip:636 [Root exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]
at com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:197)
at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2694)
at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:293)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:175)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:193)
at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:136)
at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:66)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.init(InitialContext.java:223)
at javax.naming.ldap.InitialLdapContext.<init>(InitialLdapContext.java:134)
at ldap.LDAPUtils.connectToLdap(LDAPUtils.java:58)
at Test.main(Test.java:43)
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1623)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:198)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:192)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1074)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:128)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:529)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:465)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1120)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:744)
at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
at com.sun.jndi.ldap.Connection.run(Connection.java:808)
at java.lang.Thread.run(Thread.java:619)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:325)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:219)
at sun.security.validator.Validator.validate(Validator.java:218)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1053)
... 12 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:320)
我尝试在连接到 ldap 之前使用 disableCertificateValidation 方法,如文章 Java client certificates over HTTPS/SSL 中所述
但它也给出了同样的异常(exception)。
请告知为什么我仍然收到此错误。
最佳答案
您不应该修改 JDK 附带的 cacerts
文件。复制它并将证书添加到您自己的文件中,并通过系统属性 javax.net.ssl.trustStore
告诉 JSSE。
关于java - 导入证书后仍然出现 SunCertPathBuilderException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19114300/
在过去的几天里,我们在上传到 Google Cloud Storage 时遇到了以下异常: javax.net.ssl.SSLHandshakeException:PKIX 路径构建失败:sun.se
我需要使用一些 HTTPS 网络服务。要使用证书,我正在设置 (javax.net.ssl) trustStore、trustStorePassword、keyStore 和 keyStorePass
我正在尝试通过 ssl 连接到 ldap 服务器,我获得了服务器证书并按如下方式安装了它: keytool -keystore cacerts -importcert -alias ldapCert
我有一个在 Glassfish 服务器上与 Jersey 一起运行的 Java Rest API,我使用 Firebase Auth 来验证我的用户。所以我使用 Firebase Admin SDK
在我们的组织中,我们使用内部 Artifactory 服务器作为 Maven 存储库。我已经相应地设置了 Maven 设置。问题是当我从 Eclipse 执行 Maven > Update 时,会抛出
当我尝试使用 SBT 时,某些文件无法下载并出现以下错误: Server access Error: sun.security.validator.ValidatorException: PKIX p
我不太习惯 java 世界,所以我不确定我的问题是在我的 Azure 设置上,还是在 java 设置上。在尝试下面的教程后,我遇到了以下异常。 https://learn.microsoft.com/
我正在使用 maven-jaxb2 来生成类来调用 Web 服务。 org.jvnet.jaxb2.maven2 maven-jaxb2-plugin 0.12.3
我们使用 clj-http 以及由带有自签名证书的 keystore.pfx 组成的 keystore : (let [url (str url "api/fetch") opts {:k
这个问题已经有答案了: "PKIX path building failed" and "unable to find valid certification path to requested ta
我正在尝试连接到 MySQL 数据库: static final String URL="jdbc:mysql://localhost:3306/demo_hotels?useSSL=t
我正在使用 restTemplate 通过 SSL 请求发布。问题是我无法通过 SSL 向服务器发送发布请求。我正在使用自签名证书进行通信。然而,奇怪的是,当我通过 SSL 发送获取请求时,它工作正常
我最近获得了一个网站的新证书,并按照建议使用 SHA-2 签名算法生成了它。一切看起来都很好,直到我尝试用 Java (java.net.URLConnection) 建立到该网站的安全连接,这导致了
我正在使用以下测试代码连接到 ldap 服务器。它在 Windows 上工作正常,但在 Linux 上,当我第一次尝试运行程序时它会连接,然后第二次它会抛出异常,第三次尝试它会成功连接等等(即奇数执行
我有一个类将从 https 服务器下载文件。当我运行它时,它会返回很多错误。看来我的证书有问题。是否可以忽略客户端-服务器身份验证?如果是,怎么办? package com.da; import ja
我有一个类将从 https 服务器下载文件。当我运行它时,它会返回很多错误。看来我的证书有问题。是否可以忽略客户端-服务器身份验证?如果是,怎么办? package com.da; import ja
我有一个类将从 https 服务器下载文件。当我运行它时,它会返回很多错误。看来我的证书有问题。是否可以忽略客户端-服务器身份验证?如果是,怎么办? package com.da; import ja
我有一个类将从 https 服务器下载文件。当我运行它时,它会返回很多错误。看来我的证书有问题。是否可以忽略客户端-服务器身份验证?如果是,怎么办? package com.da; import ja
我有一个类将从 https 服务器下载文件。当我运行它时,它会返回很多错误。看来我的证书有问题。是否可以忽略客户端-服务器身份验证?如果是,怎么办? package com.da; import ja
为了对我的 xmpp 堆栈进行集成测试,我在本地主机上设置了一个 vysper 服务器 (0.7)。现在我想使用版本 4.0.2 中的 smack-core 和 smack-tcp 连接到服务器。 问
我是一名优秀的程序员,十分优秀!