首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >证书链未传输到服务器

证书链未传输到服务器
EN

Stack Overflow用户
提问于 2018-01-27 07:43:54
回答 2查看 1.7K关注 0票数 5

我使用此方法将客户端证书注册到服务器证书中。

代码语言:javascript
复制
/**
 * Links the user's certificate into the server's keystore/truststore.
 * 
 * @param server
 *            The server party.
 * @return <code>true</code> if the certificate has been bound,
 *         <code>false</code> if the certificate already was bound to the
 *         truststore.
 * @throws KeyStoreException
 */
public boolean linkToServerCertificate(Party server) throws KeyStoreException {
    if (keyAlias.equals(server.keyAlias)) {
        throw new IllegalArgumentException("The alias of client and server must be different!");
    }
    keystore.setCertificateEntry(server.keyAlias, server.getAliasCert());
    Certificate certificate = keystore.getCertificate(keyAlias);
    server.keystore.setCertificateEntry(keyAlias, certificate);
    return true;
}

重新启动后,我得到以下消息:

有了环境变量JAVA_OPTS="-Djavax.net.debug=ssl“,我得到了以下信息:

代码语言:javascript
复制
*** ServerHelloDone
https-jsse-nio-8443-exec-7, WRITE: TLSv1.2 Handshake, length = 1522
https-jsse-nio-8443-exec-8, READ: TLSv1.2 Handshake, length = 7
*** Certificate chain
<Empty>
***
https-jsse-nio-8443-exec-8, fatal error: 42: null cert chain
javax.net.ssl.SSLHandshakeException: null cert chain
%% Invalidated:  [Session-4, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256]
https-jsse-nio-8443-exec-8, SEND TLSv1.2 ALERT:  fatal, description = bad_certificate

所以证书的证书链是空的。

但是检查客户端上的证书,它指出存在一个证书链。

我很困惑,为什么证书链不被传输到服务器?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-04 11:47:44

我犯了错误,我把证书链订错了。

代码语言:javascript
复制
keystore.setKeyEntry(alias, pair.getPrivate(), pass.toCharArray(), 
         chainSet.toArray(new Certificate[0]));

chainSet必须按照最近的证书是第一个证书的顺序。

真正的错误是使用内置的pki实现。

票数 0
EN

Stack Overflow用户

发布于 2018-02-04 10:07:27

您可以复制完整的证书链,如下所示。

代码语言:javascript
复制
Key key = keystore.getKey(keyAlias, clientKeyStorePassPhrase);
Certificate[] chain = keystore.getCertificateChain(keyAlias);
server.keystore.setKeyEntry(keyAlias, key, serverKeyStorePassPhrase, chain);

有关如何将证书从一个密钥存储库复制到另一个密钥存储库的详细信息,请参阅http://www.java2s.com/Code/Java/Security/Importakeycertificatepairfromapkcs12fileintoaregularJKSformatkeystore.htm

更新-

Java还建议keystore.getCertificate(keyAlias);只返回证书链的第一个元素。参考文献- https://docs.oracle.com/javase/8/docs/api/index.html?java/security/KeyStore.html

参考-有关加载证书链的更多示例- https://www.pixelstech.net/article/1420427307-Different-types-of-keystore-in-Java----PKCS12

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

https://stackoverflow.com/questions/48473727

复制
相关文章

相似问题

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