如何在Java服务器中获取和SSL CA

如何在Java服务器中获取和SSL CA,java,ssl,ca,Java,Ssl,Ca,因此,这可能是一个愚蠢的问题,但我整天都在搜索互联网,试图找出如何将可信SSL证书获取到我的java服务器中 详情: 我创建了一个java服务器,用于创建SSLServerSocket接受连接。我使用keytool创建了一个名为domain.key的密钥库以及一个证书请求(csr)。然后我联系了一个证书颁发机构(starfield)并给了他们我的csr,他们做了他们的事情并把证书(crt)还给了我。我有三个。一个叫做domain.com.crt,一个叫做sf_bundle.crt,还有一个叫做s

因此,这可能是一个愚蠢的问题,但我整天都在搜索互联网,试图找出如何将可信SSL证书获取到我的java服务器中

详情:

我创建了一个java服务器,用于创建SSLServerSocket接受连接。我使用keytool创建了一个名为domain.key的密钥库以及一个证书请求(csr)。然后我联系了一个证书颁发机构(starfield)并给了他们我的csr,他们做了他们的事情并把证书(crt)还给了我。我有三个。一个叫做domain.com.crt,一个叫做sf_bundle.crt,还有一个叫做sf_intermediate.crt

经过多次搜索后,我发现我需要将证书导入密钥库,并且密钥库可以与拥有我的公钥/私钥的密钥库相同,也可以位于单独的文件中。我选择将其放入一个名为domain.trust的单独文件中

然后,我修改了服务器以导入信任存储以及密钥存储,使用:

System.setProperty("javax.net.ssl.keyStore", "domain.key");
System.setProperty("javax.net.ssl.trustStore", "domain.trust");
沿着密钥库密码和信任库密码的对应行

问题是,当我尝试使用任何客户端进行连接时,它总是说证书已签名

我一直在用它来测试

我显然错过了一步,但我不知道在哪里

任何帮助都将不胜感激

问题是,当我尝试使用任何客户端连接时,它总是 表示证书已签名

这表示根CA证书正在发送到客户端。
您没有提到您是如何创建这个单独的密钥库的。
您应该执行以下操作:

keystore.setKeyEntry("alias", privateKey, password, chain);  
而连锁店会有:
chain[0]
-->您服务器的证书
chain[1]
-->签名者的证书
..

chain[N]
-->向根用户签名

首先需要了解SSL握手过程中发生的情况。也许你可以缩小问题的范围。你可以在网上查阅各种文件

  • 运行中的服务器必须安装CA StarField。或者它应该与CA StarField建立信任关系
  • 您的rclient证书必须是由CA StarField签署的CSR,我想您已经这样做了
  • 现在,当您向服务器出示证书时,它会检查其拥有的CA
  • 因此,如果服务器具有CA StarField,并且您的证书由StarField签名,那么您将无法获得自签名错误
  • 只有当您的证书未经CA签名时,您才能获得该证书。只需打开您的证书并检查其颁发者详细信息以确认即可

  • 首先,您似乎对keystore和truststore之间的区别感到困惑。可能有兴趣

    本质上,除非您想要使用客户端证书身份验证,否则从服务器的角度来看,您不需要更改信任存储

    经过多次搜索,我发现我需要导入证书 并且该密钥库可以是具有 公钥/私钥,也可以在单独的文件中

    为了能够使用最初从CSR获得的证书,必须将该证书导入到生成CSR的密钥库中,并且必须将其连同整个证书链导入到存储私钥的正确别名中

    这本质上与中的问题相同,但从服务器端

    使用
    keytool-list-keystore store.jks
    查找包含私钥的别名:

    Your keystore contains 1 entry
    
    myalias, Feb 15, 2012, PrivateKeyEntry, 
    Certificate fingerprint (MD5): xxxxxxxx
    
    按照正确的顺序准备一个包含您的证书和CA证书链的捆绑包(首先是您自己的证书,然后是每个颁发者):

    (您可以使用
    openssl x509-text-noout
    验证每个证书的内容,并将每个
    ---开始/结束---
    块粘贴到其标准输入中,包括分隔符。)

    然后,在一个步骤中导入该文件:

    keytool -importcert -keystore store.jks -alias myalias -file bundle.pem
    

    读了这个问题,我就想把头撞在墙上。Java密钥库非常混乱。
    keytool -importcert -keystore store.jks -alias myalias -file bundle.pem