首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSL HandShake异常

SSL HandShake异常
EN

Stack Overflow用户
提问于 2010-09-23 12:37:41
回答 11查看 104.6K关注 0票数 15

我使用SSL连接来连接web客户端和服务器。它在很长一段时间内都没有任何问题。但从昨天开始,它给出了以下错误,谁能告诉我原因。

代码语言:javascript
复制
javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.checkEOF(SSLSocketImpl.java:1172)
        at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:65)
        at net.schubart.fixme.internal.MessageInput.readExactly(MessageInput.java:166)
        at net.schubart.fixme.internal.MessageInput.readMessage(MessageInput.java:78)
        at cc.aot.itsWeb.ClientWriterThread.run(ClientWriterThread.java:241)
        at java.lang.Thread.run(Thread.java:619)
clientWriter.ready
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
        at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
        at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1586)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:865)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1029)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:621)
        at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
        at java.io.OutputStream.write(OutputStream.java:58)
        at net.schubart.fixme.internal.Message.write(Message.java:267)
        at net.schubart.fixme.internal.MessageOutput.writeMessage(MessageOutput.java:53)
EN

回答 11

Stack Overflow用户

发布于 2014-11-28 23:30:16

您遇到的问题是证书的问题。在使用安全的SSL程序之前,您可能需要熟悉以下内容。必须有一个信任库、密钥库,并且必须添加证书。将密钥添加到cacerts文件中,如步骤6所示,计算机可能会要求您输入您不知道的密码。它最有可能是"changeit“

1)使用对应的公钥/私钥创建新的密钥库和自签名证书:

代码语言:javascript
复制
 keytool -genkeypair -alias "username" -keyalg RSA -validity 7 -keystore keystore

2)检查密钥库:

代码语言:javascript
复制
keytool -list -v -keystore keystore

3)导出并检查自签名证书:

代码语言:javascript
复制
keytool -export -alias "username" -keystore keystore -rfc -file "username".cer

4)将证书导入新的信任库:

代码语言:javascript
复制
keytool -import -alias "username" -file "username".cer -keystore truststore

5)检查信任库:

代码语言:javascript
复制
keytool -list -v -keystore truststore

6) 添加到密钥库(这就是您要找的):

代码语言:javascript
复制
sudo keytool -import -file "username".cer -alias "username" -keystore "path-to-keystore"

在某些系统上,可以在

代码语言:javascript
复制
/usr/lib/jvm/<java version folder>/jre/lib/security/cacerts

在其他系统上,它类似于

代码语言:javascript
复制
/etc/ssl/certs/java/cacerts

如果您需要更多说明,请查看Git-Hub上的这个项目:https://github.com/rabbitfighter81/JSSLInfoCollectionServer,这里是一个帮助处理键的shell脚本。https://github.com/rabbitfighter81/SSLKeytool

票数 11
EN

Stack Overflow用户

发布于 2014-03-18 05:58:43

我在这个问题上已经花了超过12个小时。创建自签名证书后,需要将该证书导出到cacert文件。在我的例子中,它位于/usr/lib/java/jre/lib/security/cacert。您可以使用keytool导出证书(您可能需要拥有根用户访问权限):

代码语言:javascript
复制
$ sudo keytool -exportcert -alias keyStoreAlias -keystore \
       keyStoreKeys.keys -file /usr/local/java/jre/lib/security/cacerts
票数 10
EN

Stack Overflow用户

发布于 2011-05-05 18:57:37

服务器提供的证书不受信任。这可能是由于证书已过期,或者信任管理器无法与您的信任存储区中的任何证书建立信任链。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3775483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档