2012-06-05 57 views
0

我知道这个问题可能看起来是重复的,但我浏览过的所有线程似乎都没有解决或帮助我解决问题。glassfish v3“无法找到要求的目标的有效认证路径”

我一直在尝试几天来创建一个自签名的SSL证书。需要证书才能访问必须通过HTTPS提供WSDL文件的glassfish域。我在Solaris 10上使用Glassfish 3.1.1,它不使用默认的SSL端口(443)。目前,它正在使用8181.

SSL证书非常关注用于访问它们的主机名。证书需要在多个网络区域内有效;因此glassfish域拥有多个与之相关的不同IP。据我所知,主机名称(我们称之为foobar)无法在服务器之外访问。

经过大量研究后,我决定需要生成一个带有使用者替代名称的自签名证书,指明这些IP。以下是我采取的步骤。

  1. 使用SAN生成证书最简单的方法是下载Java 7,其中包含具有此功能的keytool实用程序。从Oracle网站下载JDK 1.7.0_04并将其安装在foobar中。

  2. 导航到glassfish domain1配置目录,例如, /选择/ glassfish3 /的glassfish /域/域1 /配置

(以下是从Oracle Glassfish的3.1文档修改:http://docs.oracle.com/cd/E18930_01/html/821-2435/ablqz.html

  1. 生成在密钥库中的证书。注意:每个glassfish域都有自己的密钥存储区;该证书下面针对domain1的产生,这是与HTTPS端口8181

    keytool -genkey -alias foobar -keyalg RSA -dname "CN=foobar, OU=xxxxxxx xxxx, O=xxxxxxxxxx, L=xxxxx xxx, S=xx, C=xx" -ext "SAN=IP:12.34.56.78,IP:99.88.77.66" -keypass changeit -storepass changeit -validity 3650 -keystore keystore.jks

  2. 导出所生成的证书的文件(在这种情况下,foobar.cer)

    keytool -export -alias foobar -storepass changeit -file foobar.cer -keystore keystore.jks

  3. 相关联
  4. 将证书导入cacerts作为可信证书。这样做两次,一次为Glassfish cacerts文件,一次为foobar上的Java JRE cacerts文件。

    keytool -import -v -trustcacerts -alias foobar -file foobar.cer -keypass changeit -storepass changeit -keystore cacerts.jks

    在/ usr/JAVA/JRE/lib/security中: keytool -import -v -trustcacerts -alias foobar -file foobar.cer -keypass changeit -storepass changeit -keystore cacerts

  5. 以防万一,我也下载并导入证书到在Windows工作站中的Java JRE的cacerts文件将访问HTTPS(可能不是必需的)。

    在C:\ Program Files文件\的Java \ JRE \ lib \ security中: keytool -import -v -trustcacerts -alias foobar -file foobar.cer -keypass changeit -storepass changeit -keystore cacerts

  6. 重新启动的GlassFish域1。

    asadmin restart-domain domain1

  7. 重启完成后,测试连接。在我的情况下,我去我的Windows工作站,在那里我已经加载了Netbeans的Java应用程序。我通过HTTPS运行需要WSDL的测试,并输入https://12.34.56.78:8181作为源。

这给了我下面的错误:

2012-06-05 10:25:32,132 WARN utilities.ConnectionManager - Could not connect to url https://12.34.56.78:8181/foobar/WebService?wsdl: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 

如果我不是使用的域为默认Glassfish的SSL证书,我反而得到指示没有使用者替代名称是否存在错误。这就是为什么我首先经历了再生证书的麻烦。

据我所知,导入证书作为可信CA证书应该解决这个“无法找到有效的证书路径”的错误。我承认我并不是一个网络专家,但是迄今为止,我的所有研究都表明了这一点。我不确定这里的问题是否因为我使用非标准的SSL端口(必须添加:8181可能导致与SAN IP不匹配)。我还没有尝试过。但是没有办法在CN或SAN中为IP:端口组合生成自签名证书吗?

谢谢...帮助将不胜感激!

P.S.我可以根据需要提供应用程序代码。

回答

1

我有这个问题已经有相当长的一段时间了。

我无法如上所述解决它,所以我最终订购了来自公共CA的SSL证书。

我遇到了Glassfish(3.1.1)和SSL的一个值得注意的怪癖。无论出于何种原因,每个域至少需要存在一个未启用SSL的网络侦听器,否则在访问启用SSL的Web服务URL时会出现证书错误。

所以说我在8080和8181上有一个监听器。如果两个都启用了SSL,那么证书将不起作用。如果SSL从8080中删除,则连接到监听器8181的证书将起作用。

0

我认为问题是,去cacerts的证书必须有一个非常具体的别名(在3.1.1.2它是glassfish实例)

相关问题