簡體   English   中英

HTTPS和SSL的安全性:-javax.net.ssl.SSLHandshakeException:證書已過期

[英]Security with HTTPS and SSL :-javax.net.ssl.SSLHandshakeException: Certificate expired

我已經嘗試使用此命令檢查命令缺少中間證書頒發機構

$ openssl s_client -connect mail.google.com:443

對於我的網站應該顯示證書鏈但它只顯示一個已經過期的證書。 但當我在https://www.digicert.com/help/上檢查服務器證書配置時

它顯示SSL證書已正確安裝並顯示正確的中間證書鏈,當我嘗試訪問我的Android應用程序中的web api時,它顯示以下錯誤: -

javax.net.ssl.SSLHandshakeException: Certificate expired at Thu Jun 11 21:58:21 GMT+05:30 2015 (compared to Wed May 18 10:48:45 GMT+05:30 2016)
05-18 10:48:45.750 28372-28412/com.src.giveup1 W/System.err:     at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:327)
05-18 10:48:45.750 28372-28412/com.src.giveup1 W/System.err:     at com.android.org.conscrypt.OpenSSLSocketImpl.waitForHandshake(OpenSSLSocketImpl.java:638)
05-18 10:48:45.750 28372-28412/com.src.giveup1 W/System.err:     at com.android.org.conscrypt.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl.java:600)
05-18 10:48:45.750 28372-28412/com.src.giveup1 W/System.err:     at org.apache.http.impl.io.SocketInputBuffer.<init>(SocketInputBuffer.java:75)
05-18 10:48:45.750 28372-28412/com.src.giveup1 W/System.err:     at org.apache.http.impl.SocketHttpClientConnection.createSessionInputBuffer(SocketHttpClientConnection.java:93)
05-18 10:48:45.751 28372-28412/com.src.giveup1 W/System.err:     at org.apache.http.impl.conn.DefaultClientConnection.createSessionInputBuffer(DefaultClientConnection.java:187)
05-18 10:48:45.751 28372-28412/com.src.giveup1 W/System.err:     at org.apache.http.impl.SocketHttpClientConnection.bind(SocketHttpClientConnection.java:123)
05-18 10:48:45.751 28372-28412/com.src.giveup1 W/System.err:     at org.apache.http.impl.conn.DefaultClientConnection.openCompleted(DefaultClientConnection.java:134)
05-18 10:48:45.751 28372-28412/com.src.giveup1 W/System.err:     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:196)
05-18 10:48:45.751 28372-28412/com.src.giveup1 W/System.err:     at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:169)
05-18 10:48:45.751 28372-28412/com.src.giveup1 W/System.err:     at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:124)
05-18 10:48:45.751 28372-28412/com.src.giveup1 W/System.err:     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:365)
05-18 10:48:45.751 28372-28412/com.src.giveup1 W/System.err:     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:602)
05-18 10:48:45.751 28372-28412/com.src.giveup1 W/System.err:     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:522)
05-18 10:48:45.751 28372-28412/com.src.giveup1 W/System.err:     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:500)

我使用以下鏈接檢查Android應用程序中的服務器證書: - http://blog.fordemobile.com/2012/04/https-requests-on-android.html

是否在服務器上正確配置了證書,或者我使用了錯誤的代碼來檢查證書。

你已經遇到了問題。 實際上你的證書已經過期了。 您的webservice的appserver需要更新其證書。

有關創建和檢查證書的完整教程,您可以按照教程進行操作:

  1. 最常見的OpenSSL命令
  2. 如何從Shell提示符驗證SSL證書

要更改證書 ,您可以按照教程進行操作:

http://www.albeesonline.com/blog/2009/06/24/javax-net-ssl-sslhandshakeexception-certificate-expired/


完整教程:

出於測試目的,我將使用由Go Daddy發布的mail.google.com:443 SSL證書。

第一步:獲得證書

創建存儲證書的目錄:

$ mkdir -p ~/.cert/mail.google.com/
$ cd ~/.cert/mail.google.com/

檢索google郵件服務器提供的mail.google.com證書:

$ openssl s_client -showcerts -connect mail.google.com:443

從“--BEGIN CERTIFICATE--”復制到“--END CERTIFICATE--”,並將其作為mail.google.com.pem保存在~/.cert/mail.google.com/目錄中。

步驟2:獲得發行人的證書

如果此證書由Go Daddy頒發,那么您需要獲得“證書頒發機構根證書”(訪問您的CA網站以獲取根證書):

$ wget https://certs.godaddy.com/repository/gd_bundle.crt -O ~/.cert/mail.google.com/gd.pem

第3步:重新頒發證書

使用c_rehash創建指向由哈希值命名的文件的符號鏈接,輸入:

$ c_rehash ~/.cert/mail.google.com/

樣本輸出:

Doing  ~/.cert/mail.google.com/
mail.google.com.pem => 1d97af50.0
gd.pem => 219d9499.0

測試一下

要確認您具有正確且有效的證書,請輸入:

$ openssl s_client -CApath ~/.cert/mail.google.com/ -connect mail.google.com:443

樣本輸出:

CONNECTED(00000003)
......
....
 Verify return code: 0 (ok)
---

應該有很多數據,但要記下的重要一點是最后一行“Verify return code: 0 (ok)” 我正在為dovecot IMAP郵件服務器使用相同的證書,鍵入以下內容以驗證郵件服務器SSL證書:

$ openssl s_client -CApath ~/.cert/mail.google.com/ -connect mail.google.com:993

樣本輸出:

CONNECTED(00000003)
.....
.....
    Verify return code: 0 (ok)
---
* OK [CAPABILITY IMAP4rev1 SASL-IR SORT THREAD=REFERENCES MULTIAPPEND UNSELECT LITERAL+ IDLE CHILDREN NAMESPACE LOGIN-REFERRALS UIDPLUS LIST-EXTENDED I18NLEVEL=1 QUOTA AUTH=PLAIN AUTH=LOGIN] Dovecot ready.

最后的“Dovecot ready”行以及0 return code indicates that everything is working fine

資源鏈接:

驗證私鑰是否與證書匹配

暫無
暫無

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

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