簡體   English   中英

如何使用自簽名證書創建密鑰庫和信任庫?

[英]How to create keystore and truststore using self-signed certificate?

我們有JAVA服務器和客戶端使用SSL通過網絡進行通信。 服務器和客戶端使用證書相互進行身份驗證。 服務器和客戶端使用的密鑰庫類型是JKS。 服務器和客戶端的密鑰庫和信任庫文件名是:server.keystore,server.truststore,client.keystore和client.truststore。

我使用自簽名證書進行測試。

問題:

Q1。 我想知道為什么我需要在步驟6中將服務器和客戶端自己的證書添加到各自的信任庫中。

Q2。 我可以減少數量步驟來實現同樣的目標嗎? 如果是,那怎么樣?

為服務器創建RSA密鑰,自簽名證書,密鑰庫和信任庫的步驟

1.生成私有RSA密鑰

openssl genrsa -out diagserverCA.key 2048

2.創建x509證書

openssl req -x509 -new -nodes -key diagserverCA.key -sha256 -days 1024 -out diagserverCA.pem

3.從私鑰和公共證書創建PKCS12密鑰庫。

openssl pkcs12 -export -name server-cert -in diagserverCA.pem -inkey diagserverCA.key -out serverkeystore.p12

4.將PKCS12密鑰庫轉換為JKS密鑰庫

keytool -importkeystore -destkeystore server.keystore -srckeystore serverkeystore.p12 -srcstoretype pkcs12 -alias server-cert

5.將客戶端證書導入服務器的信任庫。

keytool -import -alias client-cert -file diagclientCA.pem -keystore server.truststore

6.將服務器的證書導入服務器的信任庫。

keytool -import -alias server-cert -file diagserverCA.pem -keystore server.truststore

為客戶端創建RSA私鑰,自簽名證書,密鑰庫和信任庫的步驟

1.生成私鑰

openssl genrsa -out diagclientCA.key 2048

2.創建x509證書

openssl req -x509 -new -nodes -key diagclientCA.key -sha256 -days 1024 -out diagclientCA.pem

3.從私鑰和公共證書創建PKCS12密鑰庫。

openssl pkcs12 -export -name client-cert -in diagclientCA.pem -inkey diagclientCA.key -out clientkeystore.p12

4.將PKCS12密鑰庫轉換為JKS密鑰庫

keytool -importkeystore -destkeystore client.keystore -srckeystore clientkeystore.p12 -srcstoretype pkcs12 -alias client-cert

5.將服務器的證書導入客戶端的信任庫。

keytool -import -alias server-cert -file diagserverCA.pem -keystore client.truststore

6.將客戶端證書導入客戶端的信任存儲區。

keytool -import -alias client-cert -file diagclientCA.pem -keystore client.truststore

Q1。 我想知道為什么我需要在步驟6中將服務器和客戶端自己的證書添加到各自的信任庫中。

你沒有。 您將服務器和客戶端證書添加到彼此的信任庫中。 服務器和客戶端不需要信任他們自己的證書,但他們確實需要相互信任。

Q2。 我可以減少數量步驟來實現同樣的目標嗎? 如果是,那怎么樣?

你可以使用keytool完成整個事情。 大量記錄的例子。 您根本不需要使用openssl

批判:

  • 在第一部分中,步驟5和6都是錯誤的。 應該有一個步驟:將服務器的證書導出到客戶端的信任庫。
  • 類似地,在第二部分中,步驟5和6再次出錯,並且應該只有步驟:將客戶端的證書導出到服務器的密鑰庫。
  • 換句話說,兩個步驟5s應該互換,並且兩個步驟6s被刪除。

您可以在JDK文檔的JSSE參考指南中找到正確的操作說明。 每個約三個步驟。 但它真正表明的是,自簽名證書真的不值得他們印刷的紙張。 獲取CA簽名證書。 更多的價值和更容易部署(沒有出口步驟)。

你在哪里得到這個垃圾?

Q1。 我想知道為什么我需要在步驟6中將服務器和客戶端自己的證書添加到各自的信任庫中。

A1。 如果您沒有使用通用證書頒發機構來簽署您的客戶端和服務器證書......將每個證書添加到信任存儲區是唯一的方法。 但是......即使在測試環境中,您也可以創建自己的證書頒發機構,並使用它來簽署您創建的客戶端和服務器證書。 然后,您的信任存儲區只需要包含證書頒發機構的公鑰。

Q2。 我可以減少數量步驟來實現同樣的目標嗎? 如果是,那怎么樣?

A2。 是的,使用通用證書簽署您的客戶端和服務器證書。

在退房的腳本這篇文章 ,了解如何創建自己的CA,並用它進行注冊服務器和客戶端證書一步一步的。 它還創建了您的信任存儲......

希望這可以幫助。

最好的,Ace

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM