在 apache 上安装 SSL 证书...使用什么证书?

在 apache 上安装 SSL 证书...使用什么证书?

我是一名中级 Linux 用户,被分配了让 Apache 运行 https 连接的任务。当前正在运行 centOS 6,我的问题如下:

安装了 mod_ssl 并尝试正确设置路径,但不确定我是否使用了正确的文件。我有class2-root.crt 和 root-2-int.cer我还得到了通配符.ssl.pfx.我意识到有一个变量必须指向“。钥匙”我没有这个文件。因此使用以下命令生成该文件:

openssl req -new -keyout 服务器.key -out 服务器.csr

网上有很多资料介绍如何做到这一点,我试过很多次,但都没有成功。我只是需要一个能根据我的情况提供帮助的人告诉我我只需要接触和配置哪些文件。此外,密钥是否必须来自与我拥有的证书相同的来源?我需要从我得到的证书中得到哪些证书?

我在 httpd.conf 中所做的正是这样的:

<VirtualHost *:443>
DocumentRoot /var/www/html
ServerName MyServer_Ip_Adress
SSLEngine on
SSLCertificateFile /etc/ssl/crt/class-root.crt
SSLCertificateKeyFile /etc/ssl/crt/server.key
SSLCertificateChainFile /etc/ssl/crt/root-2int.cer
</VirtualHost>

此后无法停止 Apache 或重新启动它。停止总是会失败。

答案1

您不能只为您的证书生成随机密钥;您必须使用生成证书时使用的密钥。证书中有一个公钥(通常是 RSA),客户端将在密钥交换过程中使用该公钥;要完成密钥交换,您将需要私钥,私钥(除其他外)用于验证证书是否属于您。否则,您可以使用在互联网上找到的任何证书并冒充他人。

如果您提供无效的证书信息,apache 将失败。

您收到的证书链可能包含三个证书:一个是根 CA(我猜是 class-root.crt),一个由该根 CA 签名的中间 CA(root-2int.cer),以及由中间 CA 签名的服务器证书。几乎所有 SSL 证书都是这样排列的。根证书将受到客户端的信任;您的服务器必须提供自己的证书以及将其链接到根证书链的其他证书(例如,根证书和中间证书)。

链文件就是用来做这个的。要创建链文件,您应该将中间证书和 CA 证书连接到一个文件中,例如:

cat /etc/ssl/crt/root-2int.cer /etc/ssl/crt/class-root.crt > /etc/ssl/crt/chain.crt

然后,指定 chain.crt 作为您的SSLCertificateChainFile。这将导致 Apache 将这两个证书与您的证书一起发送,作为有效性的证据。

您还需要从 PFX 文件中提取证书和密钥,其中包含:

openssl pkcs12 -nocerts -in wildcard.ssl.pfx -out wildcard.key
openssl pkcs12 -clcerts -nokeys -in wildcard.ssl.pfx -out wildcard.crt

然后,如果私钥已加密(例如,您有密码),如果您希望 apache 能够在不提供密码的情况下启动,则应该解密它(并使用文件系统权限保护它:例如模式 0400 和由 root:root 拥有)。要执行此操作(假设为 RSA):

openssl rsa -in wildcard.key -out wildcard-decrypted.key

然后您可以使用这两个文件:

SSLCertificateFile /etc/ssl/crt/wildcard.crt
SSLCertificateKeyFile /etc/ssl/crt/wildcard-decrypted.key

只要证书全部匹配,就可以了。如果您想检查证书是否与密钥相对应,请使用以下两个命令(输出应该相同,同样假设为 RSA):

openssl x509 -modulus -noout -in /etc/ssl/crt/wildcard.crt
openssl rsa -modulus -noout -in /etc/ssl/crt/wildcard-decrypted.key

相关内容