2012-03-19 173 views
0

當試圖用不正確配置SSL證書擊中的環境中,我得到以下錯誤:忽略SSL證書派遣

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated 
at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:352) 
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128) 
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:390) 
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148) 
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149) 
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121) 
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:562) 
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:776) 
at dispatch.BlockingHttp$class.dispatch$BlockingHttp$$execute(Http.scala:45) 
at dispatch.BlockingHttp$$anonfun$execute$1$$anonfun$apply$3.apply(Http.scala:58) 
at dispatch.BlockingHttp$$anonfun$execute$1$$anonfun$apply$3.apply(Http.scala:58) 
at scala.Option.getOrElse(Option.scala:108) 
at dispatch.BlockingHttp$$anonfun$execute$1.apply(Http.scala:58) 
at dispatch.Http.pack(Http.scala:25) 
at dispatch.BlockingHttp$class.execute(Http.scala:53) 
at dispatch.Http.execute(Http.scala:21) 
at dispatch.HttpExecutor$class.x(executor.scala:36) 
at dispatch.Http.x(Http.scala:21) 
at dispatch.HttpExecutor$class.when(executor.scala:50) 
at dispatch.Http.when(Http.scala:21) 
at dispatch.HttpExecutor$class.apply(executor.scala:60) 
at dispatch.Http.apply(Http.scala:21) 
at com.secondmarket.cobra.lib.delegate.UsersBDTest.tdsGet(UsersBDTest.scala:130) 
at com.secondmarket.cobra.lib.delegate.UsersBDTest.setup(UsersBDTest.scala:40) 

我想完全忽略了證書。

更新:我明白了關於正確配置SSL證書的技術問題和問題不在於我們的盒子而是一種服務,我們正在使用。它主要發生在測試盒上,而不是prod/stg,因此我們正在調查,但需要測試API。

+4

我建議爲您的測試環境創建您自己的測試CA,並使用它爲您的測試客戶端/服務器頒發證書,而不是試圖忽略這些錯誤消息:這樣會更現實,並且應該防止您離開這些檢查在最終產品中禁用。 – Bruno 2012-03-19 19:03:17

+0

如何在Scala中配置CA w/dispatch? – prafulfillment 2012-03-19 19:09:58

+0

我懷疑java中應該有相同的'javax.net.ssl。*'系統屬性。如果您不熟悉密鑰庫/信任庫,[this](http://stackoverflow.com/a/6341566/372643)可能會有所幫助。 – Bruno 2012-03-19 19:14:58

回答

0

以下是能夠允許不安全的SSL證書。

Http.postData(url, payload).options(HttpOptions.allowUnsafeSSL, 
            HttpOptions.readTimeout(5000)) 
+2

只是。別。做到這一點。 – 2014-03-05 01:34:44

+2

朋友不讓朋友允許不可信的SSL請求。 – tjarratt 2014-03-05 06:10:01

+4

當我們有自制證書的測試服務器時,我需要它。 – prafulfillment 2014-03-27 18:54:39

5

你不能「忽略證書完全」,原因如下:

  1. 的問題在這種情況下,客戶端甚至沒有提供一個。
  2. 如果你不想安全,爲什麼要使用SSL呢?
  3. 我毫不懷疑,這些所謂的「開發」方法中的很多,或許大部分都已經「泄漏」到生產中。如果您構建不安全的系統,則存在部署不安全系統的重大風險。如果您沒有構建不安全感,則無法部署,因此風險消失。
+1

同意,我可以想象一些裝運前檢查單上寫着「是否使用SSL?」 - >方框打勾,沒有說任何有關信任管理員是否已正確配置的信息。 – Bruno 2012-03-19 23:18:31

+2

也許他想先檢查測試環境中系統負載上SSL的開銷。也許他所看到的信息是敏感的(比如他正在複製生產中發現的問題),並且沒有像開發人員那樣多的證書(也許甚至沒有DNS入口)。如果不理解確切的用例,說「不這樣做」很可能會忽略安全建議,但實際上它確實很重要。 – Quartz 2014-10-06 19:59:33

1

對於調度的最新版本(0.13.2),您可以使用下面創建一個接受任何證書的HTTP客戶端:

val myHttp = Http.withConfiguration(config => config.setAcceptAnyCertificate(true)) 

然後你可以使用它像GET請求這樣的:

myHttp(url("https://www.host.com/path").GET OK as.String) 

(相應地修改POST請求...)

我發現這個輸出H您可以創建一個驗證證書的Http客戶端:https://kevinlocke.name/bits/2012/10/03/ssl-certificate-verification-in-dispatch-and-asynchttpclient/

+0

感謝您鏈接到SSL認證驗證的示例代碼。這非常有幫助。 – jjcipher 2018-02-13 05:59:16