我是一个中级Linux用户,并被分配了使Apache运行https连接的任务。 目前运行centOS 6,我的问题如下:
安装mod_ssl并试图正确设置path,但不知道如果我使用正确的文件。 我有class2-root.crt和root-2-int.cer也给我一个wildcard.ssl.pfx 。 我已经意识到,有一个variables,必须指向“.key”文件,我没有。 所以生成使用:
openssl req -new -keyout server.key -out server.csr
有很多来源显示如何做到这一点,并尝试了很多次,但没有运气。 我只是需要一个能够帮助我的人来告诉我什么文件只需要触摸和configuration。 另外,如果密钥必须来自我拥有的证书相同的来源? 以及我得到什么证书?
我在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也不能重新启动它。 停止将总是失败。
您不能只为您的证书生成随机密钥; 你必须使用它生成的那个。 客户端将在密钥交换过程中使用的证书(通常是RSA)中有一个公钥; 要完成密钥交换,您将需要私钥(除其他外)validation证书是否属于您的私钥。 否则,你可以使用任何你在互联网上find的证书,冒充人。
如果您提供无效的证书信息,Apache将失败。
你得到的证书链可能包含三个证书:一个用于根CA(我怀疑是class.cit.crt),一个是由根CA(root-2int.cer)签名的中间CA,而你的服务器证书是由中间CA签名。 几乎所有的SSL证书都是这样排列的。 根证书将被客户信任; 您的服务器必须提供自己的证书和其他证书,将其链接到根(例如,根证书和中间证书)。
链文件是这样的。 要创build链式文件,您应该将中间证书和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
然后,如果私钥是encryption的(比如你有一个密码),如果你希望apache能够在没有提供密码的情况下启动,你应该解密它(并且用文件系统权限保护它:mode 0400和归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