我正在使用startssl.com的免费SSL证书作为我的Artifactory-repo。它在我的浏览器中都是绿色和漂亮的,但当然不是来自Java。所以我用这个方便的脚本安装了cacerts:
http://www.ailis.de/~k/uploads/scripts/import-startssl
但我仍然得到:
Server access Error: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException
错误。 JAVA_HOME设置正确。任何建议都非常感谢!
更多信息:
来自SBT 0.12.2的Ivy(使用pualp的脚本https://github.com/paulp/sbt-extras)正在对证书进行抨击:
[info] Resolving net.liftmodules#omniauth_2.10;2.5-SNAPSHOT-0.7-SNAPSHOT ...
[error] Server access Error: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target url=https://repo.woodenstake.se/all/net/liftmodules/omniauth_2.10/2.5-SNAPSHOT-0.7-SNAPSHOT/maven-metadata.xml
- 更新:
这个问题似乎与Java本身无关。从浏览器访问该页面会产生绿色证书,我可以看到它从StartSSL签名的信息。但即使是傻瓜或卷曲的窒息,并告诉我这是一个自签名的证书。似乎根据客户提供不同的证书。
repo位于https://repo.woodenstake.se/ - 如果您将其粘贴到浏览器中,我猜您会获得StartSSL证书。但是如果你做了https://repo.woodenstake.se/ wget {{3}},你会得到一些旧的自签名证书,我不知道它来自哪里。
- 更新更新:
所以问题是我正在提供* .woodenstake.se形式的一些网站。我觉得有可能有不同的证书,如:
server {
listen 443;
server_name site1.woodenstake.se;
client_max_body_size 512m;
ssl on;
ssl_certificate cert1.crt;
ssl_certificate_key cert1.key;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://server1;
break;
}
}
}
server {
listen 443;
server_name site2.woodenstake.se;
client_max_body_size 512m;
ssl on;
ssl_certificate cert2.crt;
ssl_certificate_key cert2.key;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://server2;
break;
}
}
}
它在我的所有浏览器中都运行良好。
但是,它不适用于wget或JDK6。
答案 0 :(得分:2)
问题完全不同。显然,您不能在同一个IP上拥有多个证书,并确保所有客户端都可以处理它。我在这台机器上有一些工具,我的nginx-config既引用了本网站的StartSSL证书,也引用了其他一些网站的自签名(snakeoil)证书。
我的nginx支持TLS SNI:
~ $ sudo nginx -V
nginx version: nginx/0.7.65
TLS SNI support enabled
但显然wget和Java客户端无法处理它。我的所有浏览器都可以。
也许可以做类似的事情:
http://library.linode.com/security/ssl-certificates/subject-alternate-names
但我不知道是否可以让StartSSL签名。
更多信息:
http://www.carloscastillo.com.ar/2011/05/multiple-ssl-certificates-on-same-ip.html
在我的Ubuntu桌面上进行Wget测试:
viktor@hedefalk-i7:~$ wget https://bob.sni.velox.ch/
--2013-03-25 17:07:19-- https://bob.sni.velox.ch/
Resolving bob.sni.velox.ch (bob.sni.velox.ch)... 62.75.148.60
Connecting to bob.sni.velox.ch (bob.sni.velox.ch)|62.75.148.60|:443... connected.
ERROR: no certificate subject alternative name matches
requested host name `bob.sni.velox.ch'.
To connect to bob.sni.velox.ch insecurely, use `--no-check-certificate'
所以我认为我的问题的答案是
您的Java版本(或所有版本,但可能在JDK7中运行:http://docs.oracle.com/javase/7/docs/technotes/guides/security/enhancements-7.html)不支持TLS SNI,因此nginx无法确定要在http之前协商哪个证书。从这个男人那里购买一张真钱游戏,或者在河里哭泣。