如何在Apache上转换和使用PKCS#12/PFX证书
当我们有多个服务器时,我们需要使用相同的SSL证书,例如加载平衡器环境或者使用通配符SSL证书,我们需要在服务器之间传输证书。
通常,如果它在Linux服务器或者Windows服务器等同类类型之间的服务器之间,服务器到服务器SSL传输将很容易。
但是当涉及到Linux服务器时,该过程变得更加困难。
在这种情况下,我们需要从Windows Server导出SSL证书并将其存储到.pfx文件。
之后,我们需要将此.pfx(pkcs#12 /)文件复制到Linux服务器,并将该文件转换为像个人证书,CA Bundle和私钥文件等Apache兼容的文件格式,并使用它。
切换托管时也可能是必要的。
我将通过本文中的逐步说明解释确切的过程,就如何在Linux服务器运行Apache上成功使用Windows Server中成功使用.pfx证书。
.pfx和.crt文件之间的差异
之前,从我们的转换过程开始,让我快速描述.pfx和.crt文件之间的差异。
基本上,证书(.crt文件)是公钥的容器。
它包括公钥,服务器名称,有关服务器的一些另外信息,以及由证书颁发机构(CA)计算的签名。
虽然SSL握手,服务器将其公钥发送到实际包含其证书的客户端,其中包含其他一些证书链。
在其他手中,一个.pfx文件是一个类似于一个袋子的PKCS#12档案,它可以包含有可选的密码保护的大量对象。
通常,PKCS#12存档包含证书(可能是其什锦的CA证书集)及其相应的私钥。
让我们从我们的转换过程开始。
步骤1:将PFX证书从Windows Server传输到我们的Linux服务器
首先,我从Windows Server为我的域Puebe.com导出了我的证书。
并且已将PFX文件复制到我的Linux服务器,使用本地系统的SCP从我的本地系统到文件夹"/transfered_certificates /"。
我们可以使用FTP,SCP,WGET或者使用这些方法中的任何一种将PFX证书传输到Linux服务器。
transfered_certificates] ll -rw-r - r-1根根目录5409 10月9日10:02 c667cafbf01ffd7310db952e50af2b2.pfx
第2步:使用openssl转换.pfx文件
我们的下一步是从此.pfx证书中提取我们所需的证书,键和CA包。
我们可以使用openssl命令从PFX文件中提取这些详细信息。
让我们看看该命令从该PFX证书中提取所需信息。
- 从PFX文件中提取证书
我们可以使用此命令从PFX文件中提取域Puebe.com的证书详细信息。
# openssl pkcs12 -in c667cafbf01ffd7310db952e50eaf2b2.pfx -clcerts -nokeys -out puebe.com.crt Enter Import Password: MAC verified OK
这将为我们提供我们的域证书文件,即puebe.com.crt
具有支持Linux的兼容格式。
- 从PFX文件中提取密钥文件
我们可以使用此命令从PFX文件中提取域Puebe.com的密钥详细信息。
# openssl pkcs12 -in c667cafbf01ffd7310db952e50eaf2b2.pfx -nocerts -nodes -out puebe.com.key Enter Import Password: MAC verified OK
这将为我们提供我们的域名文件,即puebe.com.key
- 从PFX文件中提取证书链
我们可以使用此命令从PFX文件中提取证书详细信息链。
# openssl pkcs12 -in c667cafbf01ffd7310db952e50eaf2b2.pfx -out puebe.com-ca.crt -nodes -nokeys -cacerts Enter Import Password: MAC verified OK
这将为我们提供我们在文件puebe.com-ca.crt
的域名puebe.com的证书链。
我将这些提取的文件复制到"/etc/pki/tls/certs /"下的CERT文件夹。
如果需要,我们可以执行此操作,但如果不是,则可以直接在提取这些文件的Apache配置中指定文件夹路径。
[root@li1005-45 certs]# ll puebe.com* -rw-r--r-- 1 root root 3689 Oct 9 10:10 puebe.com-ca.crt -rw-r--r-- 1 root root 1954 Oct 9 10:06 puebe.com.crt -rw-r--r-- 1 root root 1828 Oct 9 10:07 puebe.com.key
步骤3:将域SSL证书分配给Apache
转换后的.pfx文件后,我们需要将新创建的文件复制到Apache服务器并编辑Apache配置文件以使用它们。
我在/etc/httpd/conf.d/文件夹下为我的域创建了一个虚拟主机,以启用SSL并根据需要包含这些提取的文件。
请看下面的"我的虚拟主机详细信息:
[root@li1005-45 conf.d]# cat puebe_ssl.conf <VirtualHost puebe.com:443> DocumentRoot "/var/www/html/puebe.com/public_html/" ServerName www.puebe.com:443 ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA SSLCertificateFile /etc/pki/tls/certs/puebe.com.crt SSLCertificateKeyFile /etc/pki/tls/certs/puebe.com.key SSLCertificateChainFile /etc/pki/tls/certs/puebe.com-ca.crt #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire <Files ~ "\.(cgi|shtml|phtml|php3?)$"> SSLOptions +StdEnvVars </Files> <Directory "/var/www/cgi-bin"> SSLOptions +StdEnvVars </Directory>
BrowserMatch "MSIE [2-5]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 # Per-Server Logging: # The home of a custom SSL log file. Use this when you want a # compact non-error SSL logfile on a virtual host basis. CustomLog logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost>
我们可以修改文件和路径的名称以匹配证书文件:"sslcertificatefile"应该是域名的主要证书文件。sslcertificatekeyfile
应该是提取的关键文件。sslcertificatechainfile
应该是中间证书链文件。
只需务必运行配置测试并在使用此操作后重新启动Apache服务。
# apachectl configtest Syntax OK # service httpd restart
现在,我们可以使用可用的任何SSL Checker工具确认域SSL证书。