如何在Apache上转换和使用PKCS#12/PFX证书

时间:2020-03-05 15:24:18  来源:igfitidea点击:

当我们有多个服务器时,我们需要使用相同的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证书。