2017-08-03 118 views
1

我不熟悉SSL并试图弄清楚如何使它与Java Netty服务器一起工作。我想要做到这一点:Correctly creating a new certificate with an intermediate certificate using bouny castle 我想为不同的客户端创建证书,并让他们与我的服务器通话。我为每个客户端生成唯一的证书,但是我有两个关于Java中的SSL实现的基本问题。在Java中实现SSL clientAuth

  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); 
    
+0

这里有两个或三个具体问题。关于这个问题没有什么“太宽泛”。 – EJP

回答

1

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

直到它过期的一次。

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

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

是的。

  1. 客户端如何获得服务器的信任?他们拥有的证书是否由服务器rootcert-> intermediatecert签名并创建了信任链?

事实上,证书链存在从客户证书到受信任的根证书。

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

不,只要确保根证书在信任库中,通过keytool。你根本不需要编写代码。