我试图让一个运行在Tomcat 6之上的应用程序通过SSL连接到LDAP服务器。
我使用以下方法将服务器的证书导入密钥库:
C:\Program Files\Java\jdk1.6.0_32\jre\lib\security>keytool -importcert -trustcacerts -file mycert -alias ca_alias -keystore "c:\Program Files\Java\jdk1.6.0_32\jre\lib\security\cacerts"
当我用SSL调试打开启动Tomcat时,根据日志Tomcat正在使用正确的证书文件:
trustStore is: C:\Program Files\Java\jdk1.6.0_32\jre\lib\security\cacerts
但是,Tomcat没有添加我刚刚导入的证书——cacerts文件中的所有其他证书都会打印到日志中——并且连接失败:
handling exception: 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
重启Tomcat没有帮助。我已经用keyool-list命令验证了新的证书确实存在于文件中。
为什么雄猫一直无视我的新证书?
编辑:
问题似乎是由Windows 7 VirtualStore引起的。Keytool创建了cacert文件的新副本,Tomcat使用了原始文件。
你所描述的正是我在使用cmd时得到的。exe
和Windows服务器上管理组成员的普通用户。你必须启动cmd。exe
在管理模式下,将中的更改应用于cacerts文件。至少在Win2k8操作系统上。
如果不这样做,插入符号将在键工具中显示。exe-list
查看新添加的证书,但Tomcat不会看到它们。不知道为什么。但是当你添加cmd时。以管理员身份启动的exe Tomcat可以使用新添加的证书。
您还可以使用Djavax.net.debug="ssl,握手"
来查看Tomcat从cacerts文件中读取了什么。
检查是否存在具有相同CN信息但别名不同的密钥。
我以前遇到过类似的问题,当我试图导入证书的新版本,但将旧版本留在密钥库中时。我的Java程序会在密钥库中找到第一个匹配的CN密钥(这是旧的过期密钥),并尝试使用它,即使有一个更新的也匹配CN。
还要确保密钥存储库中存在身份验证根证书(以及中间证书(如果适用))。如果您要对主要安全提供商之一进行身份验证,如威瑞信或全球标志,他们通常会为您提供根证书和中间证书。如果密钥存储库中已经存在这些证书,请确保它们仍然有效。您需要拥有从您的个人证书一直到根身份验证链的所有证书,这些证书存在于您的密钥库中,以便它了解如何验证您的凭据。
将证书导入密钥库后,JVM需要重新启动。
问题内容: 在Java Web服务客户端的开发过程中,我遇到了一个问题。Web服务的身份验证使用客户端证书,用户名和密码。我从Web服务背后的公司那里收到的客户证书采用格式。当我使用文本编辑器检查文件时,它具有以下内容: 我可以在Internet Explorer中将该文件作为证书导入(无需输入密码!),并使用它通过Web服务进行身份验证。 通过首先剥离第一行和最后一行,转换为换行符并运行base
问题内容: 如何从类路径中将.p12证书导入到Java密钥库中?首先,我使用了InstallCert https://code.google.com/p/java- use- examples/source/browse/trunk/src/com/aw/ad/util/InstallCert.java 进行了一些更改,以便获得服务器证书将被导入到Java安装目录中的密钥库中。这工作正常,但现在我
问题内容: 我的Java程序如何知道包含证书的密钥库在哪里?或者,如何告诉我的Java程序在哪里寻找密钥库? 在以某种方式指定了密钥库之后,如何指定用于对服务器进行身份验证的证书? 问题答案:
null 大多数示例使用makecert或New-SelfSignedCertificate创建证书。在这种情况下,对于生产应用程序,自签名证书是否有问题?这仅供应用程序使用Azure Key Vault进行身份验证,客户机在浏览器中不会看到这一点。 如果在这种情况下,自签名证书仍然不受欢迎,那么从受信任的权威机构购买证书是否与购买SSL/TLS证书的过程相同?甚至是同一类型的证书吗?
我已经购买了一个Azure应用程序服务证书,以获得“A”的记录。之后,我试图将证书导入到密钥库中,但我得到的错误代码为500,如所附屏幕所示。 步骤1-在Azure中将证书导入到密钥库以进行安全管理。
我们如何加载他们的公钥?