如何将SSL从Tomcat迁移到Apache HTTPD?

8

我正在将我的单服务器Tomcat迁移到一个集群,由Apache HTTPD(使用mod_proxy反向代理进行负载平衡和缓存)进行支持。 是否可以将证书和密钥转换为Apache格式,还是必须重新发行整个证书?

1个回答

23

使用 keytool 直接提取证书非常容易,而提取私钥则有一些技巧(不过您可以编写程序来实现)。我建议使用 keytoolopenssl 的组合。

如果您的密钥库是 PKCS#12 格式(.p12 文件),请跳过此步骤。使用 keytool 将您的 JKS 存储转换为 PKCS12 存储(需要 Java 6+ 版本)。

keytool -importkeystore -srckeystore thekeystore.jks \
                        -srcstoretype JKS \
                        -destkeystore thekeystore.p12 \
                        -deststoretype PKCS12

然后,使用openssl提取证书:

openssl pkcs12 -in thekeystore.p12 -clcerts -nokeys -out servercert.pem

提取私钥:

umask 0077
openssl pkcs12 -in thekeystore.p12 -nocerts -nodes -out serverkey.pem
umask 0022

请注意,由于在提取私钥时使用了-nodes选项,因此私钥文件将不受保护(因为必须没有密码才能被Apache Httpd使用),因此请确保没有其他人可以读取它。

然后,使用SSLCertificateFileSSLCertificateKeyFile配置Apache Httpd,分别指向证书文件和私钥文件。


-srsstoretype 应该改为 -scrstoretype。 - jramoyo
@jramoyo,感谢您发现这个错别字。(您也可以直接建议编辑。) - Bruno
不幸的是,servercert.pem为空(0字节)。有什么提示吗? - Grim
@PeterRader 也许你的 JKS 存储并没有私钥,因此将其转换为 PKCS#12 格式可能不起作用。 - Bruno
啊,一个JKS文件不应该包含私钥!你让我今天过得很愉快!嘿,你能看一下sotacms.com的安装文章吗? - Grim
1
请问您能否解释一下如何确切地反转该过程:我有一个工作的httpd ssl配置:1. SSLCertificateFile certificate.cer,2. SSLCertificateKeyFile privatekey.key,3. SSLCertificateChainFile intermediate.cer。我需要为vertx 3创建一个java密钥库(.jks)。我所有的尝试都导致错误:www....使用了无效的安全证书。该证书不受信任,因为发行者证书未知。服务器可能没有发送适当的中间证书。可能需要导入其他根证书。错误代码:SEC_ERROR_UNKNOWN_ISSUER。 - user3464741

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接