從 Java 密鑰庫獲取證書
我使用 Java Keytool 生成
domain.csr
,domain.keystore
和domain.cer
. 我需要使用我需要的 SSLdomain.crt
和domain.key
. 我怎樣才能得到這兩個?domain.jks
和domain.keystore
都一樣嗎?csr
,pem
,等所有擴展有什麼區別crt
?
主要是欺騙如何從 JKS 文件為 httpd apache 伺服器生成 .key 和 .crt 文件。
所有文件副檔名都只是約定;重要的是您為創建文件所做的操作,您對此非常模糊。一方面,“生成” CSR 和證書是沒有意義的;他們做相互矛盾的事情。
Java KeyStore JKS是 Java 使用的密鑰庫格式(目前;預計在 Java 9 中會發生變化)。人們經常為這些文件命名
.jks
,但如果您在沒有指定.keystore
的命令中使用,那麼您創建了一個名為.keytool -genkeypair``-storetype``.keystore
.cer
並且.crt
通常用於包含一個證書的文件,或者有時用於 PEM 格式的多個證書。有兩種常見的格式,通常稱為 OpenSSL 使用的名稱,即DER 和 PEM。如果您使用普通文本工具查看文件,more cat type vi notepad
您會看到一行-----BEGIN CERTFICATE-----
(可能X.509
插入),然後是幾行幾乎所有字母和數字的行,然後是-----END
PEM 格式的類似行。人們有時會使用這些副檔名來代替或附加指定格式,例如xyzcert.pem xyzcert.der xyz.crt.pem xyz.crt.der
.CSR表示證書籤名請求,由
keytool -certreq
. CSR 用作從“真實”CA(如 Verisign GoDaddy 等)獲取證書過程的一部分。在這種情況下,您通常會從 CA 獲得伺服器證書和“鏈”或中間證書(有時超過一個); 您將它們放在一個或多個文件中,然後將它們導入您的 JKS 以與 Tomcat 等 Java 程序一起使用。在這種情況下,您的證書文件將由 CA 而不是您生成。如果您沒有從 CA 獲得證書,預設情況下
keytool -genkeypair
會創建一個適合測試的自簽名證書。您可以使用 將此證書放入單獨的文件中keytool -exportcert [-rfc]
,這是您生成的證書,但在這種情況下,您對 CSR 沒有任何用處。
.key
有時用於 OpenSSL 使用的幾種格式之一的單獨**(私有)密鑰**文件,因此被使用 OpenSSL 的程序(如 Apache httpd 和 nginx)使用。私鑰的 OpenSSL 格式有 DER 和 PEM 變體,就像證書一樣,所以人們也使用這些擴展,比如xyzkey.pem xyzkey.der xyz.key.pem xyz.key.der
.最後,PKCS12是另一種密鑰庫格式,被許多軟體支持,包括 Java、OpenSSL、Windows 和 Mozilla NSS。副檔名通常
.p12
用於 PKCS12。(PKCS12 始終是二進制的;它沒有 PEM 變體。)TLDR:如果您需要來自 JKS 格式密鑰庫的私鑰和證書的 OpenSSL 格式單獨文件,請首先使用
keytool
轉換為 pkcs12,然後使用openssl
將 pkcs12 轉換為單獨的 PEM(通常)或 DER(很少)。