从 Java 密钥库获取证书

从 Java 密钥库获取证书

我使用 Java Keytool 生成了domain.csrdomain.keystoredomain.cer。我需要使用 SSL 保护域名,为此我需要domain.crtdomain.key。我如何获得这两个?domain.jks和都一样吗? 、、等domain.keystore所有扩展名之间有什么区别?csrpemcrt

答案1

大多是骗局如何从 JKS 文件为 httpd apache 服务器生成 .key 和 .crt 文件

全部文件扩展名只是惯例;重要的是你创建文件时做了哪些操作,但你却没有明确说明。首先,同时“生成” CSR 和证书是没有意义的;它们会相互冲突。

Java 密钥库杰肯斯是 Java 使用的密钥库格式(目前;预计在 Java 9 中会发生变化)。经常命名这些文件.jks,但如果您.keystore在这样的命令中使用keytool -genkeypair而未指定,-storetype那么您将创建一个名为的 JKS 文件.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

企业社会责任表示证书签名请求,由 生成(在此上下文中)keytool -certreq。CSR 用于从“真实”CA(如 Verisign GoDaddy 等)获取证书的过程。在这种情况下,您通常会从 CA 获得您服务器的证书和“链”或中间证书(有时不止一个);您将它们放在一个或多个文件中,然后将它们导入 JKS 以供 Java 程序(如 Tomcat 等)使用。在这种情况下,您的证书文件将由 CA 生成,而不是由您生成。

如果您没有从 CA 获得证书,则默认keytool -genkeypair会创建一个适合测试的自签名证书。您可以使用 将此证书放入单独的文件中keytool -exportcert [-rfc],然后您生成的证书,但在这种情况下,您将不需要 CSR。

.key有时用于单独的(私钥)文件采用 OpenSSL 使用的几种格式之一,因此 Apache httpd 和 nginx 等使用 OpenSSL 的程序也采用这种格式。私钥的 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(很少)。

相关内容