我克隆了一个虚拟机,SSL 证书有旧主机名。我需要生成一个新的 SSL 证书。
我的问题是服务器使用什么方法来创建初始证书?这是作为 RPM 的后期安装的一部分完成的吗?如果没有可以运行的生成脚本,我将使用 openssl。谢谢!
答案1
如果您关心保留当前的localhost.crt
,请将其从目录中移出,然后输入:
make testcert
在/etc/pki/tls/certs
答案2
回答 OP 的问题(而不是提供生成 localhost.crt 的方法):这取决于 Linux 发行版和版本。有许多发行版使用 RPM,但我将提到两种最广泛使用的发行版。
在CentOS 7/RHEL 7,它是在安装后包的 scriptlet mod_ssl
。运行以下命令查看完整的 scriptlet:
rpm -q --scripts mod_ssl
实际创建证书的部分是这样的:
cat << EOF | /usr/bin/openssl req -new -key /etc/pki/tls/private/localhost.key \
-x509 -sha256 -days 365 -set_serial $RANDOM -extensions v3_req \
-out /etc/pki/tls/certs/localhost.crt 2>/dev/null
在Fedora 29,事情有点复杂:
- 这httpd服务(
/usr/lib/systemd/system/httpd.service
)对httpd-初始化服务。 - httpd-初始化服务(
/usr/lib/systemd/system/httpd-init.service
) 是该包的一部分mod_ssl
。 - httpd-初始化服务执行
/usr/libexec/httpd-ssl-gencerts
,使用 生成证书sscg
。
相关部分如下/usr/libexec/httpd-ssl-gencerts
:
sscg -q \
--cert-file /etc/pki/tls/certs/localhost.crt \
--cert-key-file /etc/pki/tls/private/localhost.key \
--ca-file /etc/pki/tls/certs/localhost.crt \
--lifetime 365 \
--hostname $FQDN \
--email root@$FQDN
该sscg
工具是一个小型独立程序(不是脚本)。引用 Fedora 软件包描述:
帮助创建更安全的“自签名”证书的实用程序。此工具创建的证书以创建 CA 证书的方式生成,该证书可以安全地导入到客户端计算机中以信任服务证书,而无需设置完整的 PKI 环境,也不会使计算机面临服务证书的虚假签名风险。
答案3
您可以使用以下命令快速生成新的自签名证书和私钥,并按照提示操作即可。
openssl req -new -x509 -newkey rsa:2048 -keyout server.key -nodes -days 3650 -out server.crt
当我不关心证书的属性而只希望主机名匹配时,我发现非常有用的一件事是,你可以将属性导入到 openssl 中,只需更改测试.示例.tld在下面的命令中匹配您想要使用的任何主机名。它将保留所有属性为空白,您最终将在当前目录中获得 server.crt 和 server.key:
echo -e "XX\n\n \n \n\ntest.example.tld\n\n" | openssl req -new -x509 -newkey rsa:2048 -keyout server.key -nodes -days 3650 -out server.crt &> /dev/null