从Java密钥库获取证书

我使用Java Keytool来生成domain.csrdomain.keystoredomain.cer 。 我需要使用我需要domain.crtdomain.key SSL来保护域。 我怎么能得到这两个? domain.jksdomain.keystore都是一样的吗? 像csrpemcrt等所有扩展名有什么区别?

大多愚蠢如何从JKS文件为httpd apache服务器生成.key和.crt文件 。

所有文件扩展名只是约定 ; 重要的是你做什么操作来创build一个文件,你离开很模糊。 首先,“生成”CSR和证书是没有意义的; 他们做相互矛盾的事情。

Java KeyStore JKS是Java使用的密钥库格式(目前,预计会在Java 9中进行更改)。 人们通常将这些文件命名为.jks但是如果您在诸如未指定-storetype keytool -genkeypair命令中使用.keystore ,则您创build了一个名为.keystore的JKS文件。

.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会创build一个自签名的证书以供testing。 你可以把这个证书放到一个单独的文件中,使用keytool -exportcert [-rfc] ,这你生成的一个证书,但是在这种情况下,你将不会有任何的CSR使用。

.key有时用于OpenSSL使用的几种格式之一的单独(私人)密钥文件,因此使用OpenSSL的程序(如Apache httpd和nginx)。 xyzkey.pem xyzkey.der xyz.key.pem xyz.key.der的OpenSSL格式有DER和PEM变种,就像certficates一样,所以人们也使用像xyzkey.pem xyzkey.der xyz.key.pem xyz.key.der这样的扩展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(很less)。