2017-08-03 45 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。你根本不需要編寫代碼。