gpt4 book ai didi

java - 使用 HTTPS 和 SSL 的安全性 :-javax.net.ssl.SSLHandshakeException:证书已过期

转载 作者:太空狗 更新时间:2023-10-29 13:58:57 25 4
gpt4 key购买 nike

我已经尝试使用此命令检查缺少中间证书颁发机构

$ 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

证书是否在服务器上正确配置,或者我使用了错误的代码来检查证书。

最佳答案

您已经遇到了问题。 实际上您的证书已过期。您的网络服务的应用服务器需要更新其证书。

有关创建和检查证书的完整教程,您可以按照教程操作:

  1. The Most Common OpenSSL Commands
  2. How To Verify SSL Certificate From A Shell Prompt

要更改证书,您可以按照教程:

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


完整教程:

出于测试目的,我将使用 mail.google.com:443Go Daddy 颁发的 SSL 证书。

第 1 步:获取证书

创建存放证书的目录:

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

获取 google 邮件服务器提供的 mail.google.com 证书:

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

Copy from the “—–BEGIN CERTIFICATE—–” to the “—–END CERTIFICATE—–” , and save it in your ~/.cert/mail.google.com/ directory as mail.google.com.pem.

第 2 步:获取颁发者的证书

如果此证书是由 GoDaddy 颁发的,那么您需要获取“Certification Authority Root Certificate”(访问您的 CA 的网站获取根证书):

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

第 3 步:重新散列证书

使用 c_rehash 创建指向由哈希值命名的文件的符号链接(symbolic link),输入:

$ 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 返回代码再次表明一切正常

资源链接:

Verifying that a Private Key Matches a Certificate

关于java - 使用 HTTPS 和 SSL 的安全性 :-javax.net.ssl.SSLHandshakeException:证书已过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37290908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com