[英]Using key tool to make a CSR, how do I make a cert for tomcat ssl?
我的目標是使用keytool創建一個證書簽名請求(CSR),然后使用該CSR並制作一個實際的證書添加到密鑰庫中,然后添加它,以便SSL(HTTPS // my.site.com)可以正常工作。 這是出於測試目的。
到目前為止,我已經完成了以下步驟:
為我的CSR生成密鑰庫:
keytool -genkey -dname“ CN = test.com,OU = TEST,O = Test,L = TestCity,ST =佛羅里達,C = US” -alias tomcat -keyalg RSA -keysize 2048 -keystore test.keystore -storepass changeit
生成CSR:
keytool -certreq -alias tomcat-文件request.csr -keystore test.keystore -storepass changeit
生成服務器密鑰以與openSSL一起使用以創建簽名證書。 這需要輸入密碼“ changeit”,然后進行轉換以刪除server.key的密碼:
openssl genrsa -des3 -out server.key 2048
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
使用CSR生成我的簽名證書:
openssl x509 -req -days 365 -in request.csr -signkey server.key -out server.crt
最后,將證書導入到我的密鑰庫中。
keytool-導入-trustcacerts-文件server.crt -keystore test.keystore -alias tomcat -storepass changeit
結果是以下錯誤:
keytool錯誤:java.lang.Exception:答復和密鑰庫中的公鑰不匹配
keytool -genkey -dname "CN=test.com, OU=TEST, O=Test, L=TestCity, ST=Florida, C=US" -alias tomcat
這不僅可以生成密鑰對,還可以使用此DN生成自簽名證書,然后將其用作生成帶有-certreq
的CSR的基礎(聽起來可能很奇怪,但是自簽名證書和PKCS #10 CSR實際上非常相似:CSR或多或少是一個沒有有效時間戳的自簽名證書。
這在文檔中 :
-genkeypair
[...]
生成密鑰對(公用密鑰和關聯的專用密鑰)。 將公鑰包裝到X.509 v3自簽名證書中,該證書存儲為單元素證書鏈。 該證書鏈和私鑰存儲在由別名標識的新密鑰庫條目中。
[...]在較早的版本中,此命令名為-genkey。
將CSR提交給CA時,通常要做的是將CA頒發的證書重新導入到相同的別名(您的私鑰所在的別名)中,從而覆蓋該臨時自簽名證書。
您可以使用keytool -certreq
和openssl
跳過這些步驟:只需使用keytool
導出證書,然后在必要時將其重新導入一個單獨的信任庫以與Java客戶端一起使用。
如果要模擬CA,則不要使用openssl x509
命令:
openssl x509 -req -days 365 -in request.csr -signkey server.key -out server.crt
-signkey filename
此選項使輸入文件使用提供的私鑰進行自簽名。
如果輸入文件是證書,它將發行者名稱設置為主題名稱(即使其自簽名),將公鑰更改為提供的值,並更改開始日期和結束日期。 開始日期設置為當前時間,結束日期設置為由-days選項確定的值。 除非提供了-clrext選項,否則將保留所有證書擴展名。
如果輸入是證書請求,則使用請求中的主題名稱,使用提供的私鑰創建自簽名證書。
因此,從本質上講,公鑰材料也來自此私鑰。 因此,它將與您提供的CSR中的公鑰不匹配。 在這種情況下,CSR僅用於提供證書標識信息和屬性。
實際上,將CSR轉換為證書是可以具有許多參數的。 雖然keytool
根據您提供的參數生成合理的默認自簽名證書,但OpenSSL通常需要更多配置。 對於您正在嘗試執行的操作, openssl ca
當然會更相關,盡管我建議使用CA.pl
包裝器以方便使用(它會跟蹤您已頒發的證書,序列號等)。
由於這似乎主要是為了測試(可能是偶爾進行),因此您可能還會發現xca之類的其他工具可以更方便地執行該步驟。
我不確定以下情況是否正確,但似乎可行。 從各個網站匯總一些步驟,執行這些命令將生成一個密鑰庫,該密鑰庫可用於通過tomcat進行SSL連接。 它確實將各個部分組成,這將使我能夠測試系統的每個部分。
keytool -genkey -dname“ CN = test.com,OU = TEST,O = Test,L = TestCity,ST =佛羅里達,C = US” -alias tomcat -keyalg RSA -keysize 2048 -keystore test.keystore -storepass changeit
keytool -certreq -alias tomcat-文件request.csr -keystore test.keystore -storepass changeit
keytool -v -importkeystore -srckeystore test.keystore -srcalias tomcat -destkeystore myp12file.p12 -deststoretype PKCS12
openssl pkcs12 -in myp12file.p12 -out server.key
openssl x509 -req -days 365 -in request.csr -signkey server.key -out server.crt
keytool-導入-trustcacerts-文件server.crt -keystore test.keystore -alias tomcat -storepass changeit
以下過程描述了與JBoss 5.0應用程序服務器完美配合的JKS密鑰庫的創建。 Tomcat可能使用相同類型的密鑰庫。
您可以借助openssl實用程序在Linux操作系統中創建私鑰。
將umask設置為077,以使創建的文件只能由當前用戶讀取:
$ OLD_UMASK=`umask` (umask is inside backtick characters) $ umask 077
創建一個2048位長的私鑰,並將其存儲在文件private_key.pem
:
$ openssl genrsa 2048 > private_key.pem
恢復文件創建掩碼:
$ umask $OLD_MASK
您可以使用以下命令創建證書簽名請求(CSR):
$ openssl req -new -key private_key.pem -nodes
接下來,您將不得不回答各種問題。 特別注意必須與服務器的完全合格域名匹配的“ 公用名”字段。 該命令生成以下包含CSR的文本:
----- BEGIN證書請求-----
MIIBZYnPGQZK06tI6EKLGp7qmaFAIAe ...
....
-----結束證書請求-----
該過程假定您(a)在文件private_key.pem
具有私鑰,(b)從文件certificate.pem
的證書頒發機構(CA)收到的數字證書,以及(c)證明該證書的鏈式證書。文件ca_chain_cert.pem
如果您的CA由另一個權威機構CA1認證,而最終由根CA CA_ROOT認證(CA-> CA1-> CA_ROOT),並且相應的證書分別位於單獨的文件ca_cert.pem
, ca1_cert.pem
和ca_root.pem
,您可以通過以下命令創建ca_chain_cert.pem
:
$ cat ca_cert.pem ca1_cert.pem ca_root.pem > ca_chain_cert.pem
鏈證書是通過將certificate.pem
與ca_chain_cert.pem
結合在一起來生成的:
$ cat certificate.pem ca_chain_cert.pem > chain.pem
概念是您必須擁有一個文件,其中包含所有帶有該順序的證書:
此步驟假設文件chain.pem
包括證書鏈, private_key.pem
私鑰和certificate.pem
您從CA(鏈的第一部分)獲得服務器證書。
使用以下命令從證書鏈和私鑰在文件keystore.p12
創建PKCS12密鑰keystore.p12
:
$ openssl pkcs12-導出-名稱server_cert -in chain.pem -inkey private_key.pem -certfile certificate.pem -out keystore.p12
記下導出密碼,因為在以下所有步驟中將使用該密碼來訪問密鑰庫。
從PKCS12密鑰庫在文件server.keystore
創建一個JKS密鑰庫:
$ keytool -importkeystore -destkeystore server.keystore -srckeystore keystore.p12 -srcstoretype pkcs12 -alias server_cert
您可以使用以下命令列出證書:
$ keytool-列表-v -keystore server.keystore
驗證命令輸出是否聲明了證書鏈的正確大小。 對於CA,CA1和CA_ROOT,大小必須為4。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.