2013-03-22 29 views
1

我正在爲我的Artifactory-repo使用來自startssl.com的免費SSL-cert。在我的瀏覽器中,這一切都很綠色,但當然不是來自Java。所以我安裝的cacerts用這個方便的腳本:根據客戶端提供不同的ssl-certs

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(使用pualp的劇本https://github.com/paulp/sbt-extras),其在證書barfing:

[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/你會得到一些舊的自簽名證書,我不知道它來自哪裏。

- Update更新:

所以問題是,我的服務形式* .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

您是否成功安裝了cacerts? – enigma 2013-03-24 13:07:20

+0

是的,我做到了。但是,問題看起來完全不同。根據客戶提供兩種不同的證書。查看我的更新。謝謝。 – 2013-03-25 15:44:55

+0

它是否設置在反向代理之後? – Bruno 2013-03-25 15:56:41

回答

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如果簽字。

此處瞭解詳情:

[email protected]:~$ 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版本(:

http://www.carloscastillo.com.ar/2011/05/multiple-ssl-certificates-on-same-ip.html

我的Ubuntu桌面上的Wget測試或所有,但也許它在JDK7中工作:http://docs.oracle.com/javase/7/docs/technotes/guides/security/enhancements-7.html)不支持TLS SNI,因此nginx無法確定要使用哪個證書,因爲這是n在http之前引導。從這個男人那裏購買一張通配符證明真實的錢,或者流下一條河。

相關問題