在Java中实现SSL clientAuth

时间:2017-08-03 21:58:18

标签: java ssl

我是SSL的新手,并试图弄清楚如何使用Java Netty服务器。我想基本上这样做:Correctly creating a new certificate with an intermediate certificate using bouny castle 我想为不同的客户创建证书,让他们与我的服务器通信。我为每个客户端生成了唯一的证书,但我有两个关于Java中SSL实现的基本问题。

  1. 当我创建我的中间证书来签署客户端证书时,这基本上是一次类似于创建根证书的东西吗?意思是,在该示例中,作者生成KeyPair intermediatePair。当我签署不同的客户端证书时,我是否重新生成此KeyPair?我的猜测是否定的,我应该在某处保存这个中间证书,然后在我的服务器启动时加载它。

  2. 客户如何真正得到服务器的信任?事实上,他们拥有的证书是由服务器rootcert-> intermediatecert签名并创建信任链吗?或者在我创建证书之后,我需要将该证书添加到我在服务器启动时使用的KeyStore trustStore?像这样的东西(伪代码)

    KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
    trustStore.load(null, null);
    CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
    Path p = Paths.get(path);
    byte[] bytes = Files.readAllBytes(p);
    InputStream in = new ByteArrayInputStream(bytes);
    X509Certificate certificate = null;
    if (in != null) {
        certificate = (X509Certificate) certificateFactory.generateCertificate(in);
        in.close();
    }
    trustStore.setCertificateEntry("certficateName", certificate);
    

1 个答案:

答案 0 :(得分:1)

  

当我创建我的中间证书以签署客户端证书时,这基本上是一次类似于创建根证书吗?

有一次到期。

  

意思是,在该示例中,作者生成KeyPair intermediatePair。当我签署不同的客户端证书时,我是否重新生成此KeyPair?

没有

  

我的猜测是否定的,我应该在某个地方保存这个中间证书,然后在我的服务器启动时加载它。

  
      
  1. 客户如何真正得到服务器的信任?事实上,他们拥有的证书是由服务器rootcert-> intermediatecert签名并创建信任链吗?
  2.   

事实上,从客户端证书到受信任的根证书存在一系列证书。

  

或者在我创建证书之后,所以我需要在我的服务器启动时使用KeyStore trustStore我添加该证书?像这样的东西(伪代码)

没有。只需通过keytool确保根证书位于信任库中。你根本不需要编写代码。