1

Artifactory リポジトリ用に、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-cert が取得されると思います。しかし、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 からは機能しません。

4

1 に答える 1

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 をサポートしていないため、これはhttpの前にネゴシエートされるため、nginxはどの証明書を提供するかを確信できません。男から本物のお金でワイルドカード証明書を購入するか、川を泣いてください。

于 2013-03-25T16:13:34.023 に答える