gpt4 book ai didi

java - 根据客户端交付不同的 ssl 证书

转载 作者:太空宇宙 更新时间:2023-11-03 13:18:28 24 4
gpt4 key购买 nike

我正在为我的 Artifactory-repo 使用来自 startssl.com 的免费 SSL 证书。它在我的浏览器中都是绿色的,而且很漂亮,但当然不是来自 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 签名的信息。但即使是 wget 或 curl 也会窒息并告诉我这是一个自签名证书。似乎根据客户端交付了不同的证书。

存储库位于 https://repo.woodenstake.se/ - 如果您将其粘贴到您的浏览器中,我猜您会获得 StartSSL 证书。但是如果你做 wget https://repo.woodenstake.se/你得到一些旧的自签名证书,我不知道它来自哪里。

-- 更新更新:

所以问题是我正在为几个 *.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。

最佳答案

问题完全不同。显然,您不能在同一个 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 之前协商的。从该人那里用真钱购买通配符证书或哭泣。

关于java - 根据客户端交付不同的 ssl 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15574942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com