Java 未找到合适的证书

Java 未找到合适的证书,java,ssl,apache-kafka,ssl-certificate,Java,Ssl,Apache Kafka,Ssl Certificate,我知道这是一个常见的错误,这个问题有很多重复的地方。虽然他们是我还没有能够真正找到一个真正的原因和解决我的问题,所以让我们开始 我正在使用卡夫卡,在我的信任商店的服务器端,我有4条链。每个链代表一个证书颁发机构。每个链也作为bundle(Interm+根证书)导入。 当然,每个代理都有自己的密钥库,并由CA-1签署 我的客户有CA-3签署的证书。在我客户的托管商店中,我可以列出我的经纪人身上的相同连锁店 例如: 客户端尝试进行身份验证,并拥有CA-1签署的证书(有效) 客户端尝试进行身份验证,并

我知道这是一个常见的错误,这个问题有很多重复的地方。虽然他们是我还没有能够真正找到一个真正的原因和解决我的问题,所以让我们开始

我正在使用卡夫卡,在我的信任商店的服务器端,我有4条链。每个链代表一个证书颁发机构。每个链也作为bundle(Interm+根证书)导入。 当然,每个代理都有自己的密钥库,并由CA-1签署

我的客户有CA-3签署的证书。在我客户的托管商店中,我可以列出我的经纪人身上的相同连锁店

例如:

  • 客户端尝试进行身份验证,并拥有CA-1签署的证书(有效
  • 客户端尝试进行身份验证,并拥有CA-2签署的证书(有效
  • 客户端尝试进行身份验证,并且拥有由CA-3签名的证书(不起作用
  • 在客户端的调试模式下,我可以找到以下内容:

    check handshake state: unknown[13]
    *** CertificateRequest
    Cert Types: RSA, DSS, ECDSA
    Supported Signature Algorithms: SHA512withECDSA, SHA512withRSA, SHA384withECDSA, SHA384withRSA, SHA256withECDSA, SHA256withRSA, SHA256withDSA, SHA224withECDSA, SHA224withRSA, SHA224withDSA, SHA1withECDSA, SHA1withRSA, SHA1withDSA
    Cert Authorities:
    <CN=CA-1>
    <CN=CA-2>
    <CN=CA-3>
    .
    .
    .
    *** ServerHelloDone
    [read] MD5 and SHA1 hashes:  len = 4
    0000: 0E 00 00 00                                        ....
    Warning: no suitable certificate found - continuing without client authentication
    *** Certificate chain
    <Empty>
    *** 
    .
    .
    .
    kafka-producer-network-thread | console-producer, READ: TLSv1.2 Handshake, length = 3018
    check handshake state: server_hello[2]
    kafka-producer-network-thread | console-producer, fatal error: 10: Handshake message sequence violation, 2
    javax.net.ssl.SSLProtocolException: Handshake message sequence violation, 2
    %% Invalidated:  [Session-4, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384]
    kafka-producer-network-thread | console-producer, SEND TLSv1.2 ALERT:  fatal, description = unexpected_message
    Padded plaintext before ENCRYPTION:  len = 80
    
    
    检查握手状态:未知[13]
    ***证书申请
    证书类型:RSA、DSS、ECDSA
    支持的签名算法:SHA512带ECDSA、SHA512带RSA、SH384带ECDSA、SH384带RSA、SH256带ECDSA、SH256带RSA、SH224带ECDSA、SH224带RSA、SH224带DSA、SHA1带ECDSA、SHA1带RSA、SHA1带DSA
    核证机关:
    .
    .
    .
    ***海龙石
    [读取]MD5和SHA1哈希:len=4
    0000:0e00。。。。
    警告:找不到合适的证书-在没有客户端身份验证的情况下继续
    ***证书链
    *** 
    .
    .
    .
    卡夫卡制作者网络线程|控制台制作者,读:TLSv1.2握手,长度=3018
    检查握手状态:服务器\你好[2]
    kafka producer网络线程|控制台producer,致命错误:10:握手消息序列冲突,2
    javax.net.ssl.SSLProtocolException:握手消息序列冲突,2
    %%无效:[会话4,TLS\u ECDHE\u RSA\u与\u AES\u 256\u CBC\u SHA384]
    kafka producer网络线程|控制台producer,发送TLSv1.2警报:致命,描述=意外消息
    加密前填充的明文:len=80
    
    现在,我不明白的是。应用程序能够找到代理的受信任证书(开始时我不想放日志),能够在CertificateRequest中找出所有可用的CA,但仍然无法进行握手

    可以肯定的是,我获得失败客户端的Interm+根证书的方式是下载中间证书并从Interm中提取根证书。创建了一个捆绑包,interm是第一个,root是第二个,我将该捆绑包放在truststore和keystore中的一个别名下

    我知道这很可能是服务器信任错误,但我不知道如何纠正这一错误,因为证书确实存在,并且导入这些证书包的方式与导入其他正在工作的证书包的方式相同

    如果我做错了,请纠正我,如果我做错了,请纠正我甚至更好。我是SSL nod,我想学习一些东西。。
    谢谢

    在我的案例中,我认为在堆栈上的许多案例中,问题是:

    • 我的客户端密钥库中没有privKeyEntry
    因此,如果我愿意:

    $ keytool -list -keystore client.keystore.jks  
    
    我会发现:

    primaryca, Jul 26, 2014, trustedCertEntry,
    Certificate fingerprint (SHA1): <snip>
    client, Jul 26, 2014, trustedCertEntry,
    Certificate fingerprint (SHA1):  <snip>
    
    现在,在列出keystore之后:

    CArootbundle, Jul 26, 2014, trustedCertEntry,
    Certificate fingerprint (SHA1): <snip>
    1, Jul 26, 2014, PrivateKeyEntry,
    Certificate fingerprint (SHA1):  <snip>
    
    CArootbundle,2014年7月26日,trustedCertEntry,
    证书指纹(SHA1):
    2014年7月26日,PrivateKeyEntry,
    证书指纹(SHA1):
    
    使用新创建的密钥库启动应用程序后,一切都开始工作:)

    希望我帮助了别人


    Cheers

    这里的错误是,导入签名证书时没有使用与生成密钥对和CSR时相同的别名。许多的复制品。
    CArootbundle, Jul 26, 2014, trustedCertEntry,
    Certificate fingerprint (SHA1): <snip>
    1, Jul 26, 2014, PrivateKeyEntry,
    Certificate fingerprint (SHA1):  <snip>