簡體   English   中英

使用關鍵工具制作CSR,如何為tomcat ssl制作證書?

[英]Using key tool to make a CSR, how do I make a cert for tomcat ssl?

我的目標是使用keytool創建一個證書簽名請求(CSR),然后使用該CSR並制作一個實際的證書添加到密鑰庫中,然后添加它,以便SSL(HTTPS // my.site.com)可以正常工作。 這是出於測試目的。

到目前為止,我已經完成了以下步驟:

  1. 為我的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

  2. 生成CSR:

    keytool -certreq -alias tomcat-文件request.csr -keystore test.keystore -storepass changeit

  3. 生成服務器密鑰以與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

  4. 使用CSR生成我的簽名證書:

    openssl x509 -req -days 365 -in request.csr -signkey server.key -out server.crt

  5. 最后,將證書導入到我的密鑰庫中。

    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 -certreqopenssl跳過這些步驟:只需使用keytool導出證書,然后在必要時將其重新導入一個單獨的信任庫以與Java客戶端一起使用。


如果要模擬CA,則不要使用openssl x509命令:

openssl x509 -req -days 365 -in request.csr -signkey server.key -out server.crt

openssl x509 -signkey文檔所述:

-signkey filename

此選項使輸入文件使用提供的私鑰進行自簽名。

如果輸入文件是證書,它將發行者名稱設置為主題名稱(即使其自簽名),將公鑰更改為提供的值,並更改開始日期和結束日期。 開始日期設置為當前時間,結束日期設置為由-days選項確定的值。 除非提供了-clrext選項,否則將保留所有證書擴展名。

如果輸入是證書請求,則使用請求中的主題名稱,使用提供的私鑰創建自簽名證書。

因此,從本質上講,公鑰材料也來自此私鑰。 因此,它將與您提供的CSR中的公鑰不匹配。 在這種情況下,CSR僅用於提供證書標識信息和屬性。

實際上,將CSR轉換為證書是可以具有許多參數的。 雖然keytool根據您提供的參數生成合理的默認自簽名證書,但OpenSSL通常需要更多配置。 對於您正在嘗試執行的操作, openssl ca當然會更相關,盡管我建議使用CA.pl包裝器以方便使用(它會跟蹤您已頒發的證書,序列號等)。

由於這似乎主要是為了測試(可能是偶爾進行),因此您可能還會發現xca之類的其他工具可以更方便地執行該步驟。

我不確定以下情況是否正確,但似乎可行。 從各個網站匯總一些步驟,執行這些命令將生成一個密鑰庫,該密鑰庫可用於通過tomcat進行SSL連接。 它確實將各個部分組成,這將使我能夠測試系統的每個部分。

  1. 生成密鑰庫

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

  1. 產生企業社會責任

keytool -certreq -alias tomcat-文件request.csr -keystore test.keystore -storepass changeit

  1. 從我的密鑰庫中導出私鑰,以用於創建簽名證書

keytool -v -importkeystore -srckeystore test.keystore -srcalias tomcat -destkeystore myp12file.p12 -deststoretype PKCS12

openssl pkcs12 -in myp12file.p12 -out server.key

  1. 從CSR創建簽名證書

openssl x509 -req -days 365 -in request.csr -signkey server.key -out server.crt

  1. 最終將其成功導入密鑰庫

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.pemca1_cert.pemca_root.pem ,您可以通過以下命令創建ca_chain_cert.pem

 $ cat ca_cert.pem ca1_cert.pem ca_root.pem > ca_chain_cert.pem 

鏈證書是通過將certificate.pemca_chain_cert.pem結合在一起來生成的:

 $ cat certificate.pem ca_chain_cert.pem > chain.pem 

概念是您必須擁有一個文件,其中包含所有帶有該順序的證書:

  1. 主機證書
  2. CA證書
  3. CA1證書
  4. 根CA證書

生成JKS密鑰庫

此步驟假設文件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.

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