簡體   English   中英

HTTP SSL相互身份驗證代碼在Apache HTTPClient 4.0.1中可用,但在4.1中失敗

[英]HTTP SSL Mutual Authentication Code worked in Apache HTTPClient 4.0.1 but fails in 4.1

我正在為服務器的客戶端執行相互身份驗證。

我有一台帶有自簽名證書的服務器。 我創建了一個Java密鑰庫(trustStore),該服務器在信任庫中包括該服務器。 我有一個密鑰庫,其中包含我的證書和私鑰。 我的證書已由服務器簽名(與我自己的證書相同,並且位於我的信任庫中)。 我已經使用API​​創建了一個SSLSocketFactory來注冊我的密鑰庫和信任庫(類似於本文使用HttpClient 4.0.1與x509證書進行相互身份驗證 )。

使用Apache HTTPClient 4.0.1,一切正常。 我升級到4.1,除了不必對Scheme構造函數中的參數重新排序之外,代碼是相同的。 但是,現在我得到了javax.net.ssl.SSLPeerUnverifiedException:對等方未通過身份驗證

請幫助?

我看到在4.1中有一個org.apache.http.conn.ssl.TrustSelfSignedStrategy,但是沒有找到任何使用它的示例。 我什至不確定我是否要使用它。 我必須做出用戶選擇,這似乎對於他們來說,最好給我他們的服務器證書以添加到我的信任庫中會更好。 http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/conn/ssl/TrustSelfSignedStrategy.html

下面是代碼:

    String doGet(URI uri, String acceptType) throws Exception 
    { 
            // To be replaced by common module. 
            String result = null; 
            DefaultHttpClient httpclient = new DefaultHttpClient(); 
            try 
            { 
                    SSLSocketFactory socketFactory = new SSLSocketFactory(keyStore, String.valueOf(keyStorePassword), trustStore); 
                    Scheme sch = new Scheme("https", 443, socketFactory); 
                    httpclient.getConnectionManager().getSchemeRegistry().register(sch); 

                    HttpGet httpget = new HttpGet(uri.toASCIIString()); 
                    httpget.addHeader("Accept", acceptType); 
                    HttpResponse response = httpclient.execute(httpget); 
                    HttpEntity entity = response.getEntity(); 

                    result = IOUtils.getContent(entity.getContent()); 
            } finally 
            { 
                    httpclient.getConnectionManager().shutdown(); 
            } 

            return result; 
    } 

以下是我在4.1中得到的例外:

Exception in thread "main" 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:754) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)

我將此內容發布在HTTPClient用戶列表上,在與開發人員進行交互之后,發現了4.1中的一個錯誤,該錯誤將在4.1.1中修復。

http://old.nabble.com/SSL-Mutual-Authentication-Code-worked-in-4.0.1-but-fails-in-4.1-tt31092864.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM