XAMPP Apache配置SSL证书,支持HTTPS访问

文章目录

本文的测试结果基于XAMPP 5.6.28软件,相关的版本信息如下:

text 复制代码
Windows Version:  Home  64-bit
XAMPP Version: 5.6.28
Control Panel Version: 3.2.2  [ Compiled: Nov 12th 2015 ]

第1步:购买SSL证书

可以从阿里云购买SSL证书,然后下载对应服务器(如Apache)相关的证书文件。

现假设您购买了绑定域名abc.com的SSL证书,下载下来的证书文件将会是:

text 复制代码
abc.com.key
abc.com_public.crt
abc.com_chain.crt

第2步:确保443端口没有被占用

bash 复制代码
netstat -ano | findstr 443

图中,最后一列,就是占用端口的进程号。可以taskkill强制结束占用进程:

bash 复制代码
taskkill /f /pid 2916

第2步:httpd.conf启用SSL

编辑xampp/apache/conf/httpd.conf,将如下2行前面的#注释符去掉,以加载SSL模块,并引入相关配置。

LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf

第3步:httpd-ssl.conf配置

一个配置好的httpd-ssl.conf完整文件(删除了其他注释)内容如下:

bash 复制代码
Listen 443
SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4
SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4

SSLHonorCipherOrder on 

SSLProtocol all -SSLv3 #排除不安全的v3协议
SSLProxyProtocol all -SSLv3

SSLPassPhraseDialog  builtin

SSLSessionCache "shmcb:D:/xampp/apache/logs/ssl_scache(512000)"
SSLSessionCacheTimeout  300

# SSLUseStapling On

<VirtualHost _default_:443>

DocumentRoot "D:/data_path/web"
ServerName dev.abc.com:443
ServerAdmin admin@example.com
ErrorLog "D:/xampp/apache/logs/error443.log"
TransferLog "D:/xampp/apache/logs/access443.log"

SSLEngine on

ProxyPass /tc http://127.0.0.1:8989
ProxyPassReverse /tc http://127.0.0.1:8989

SSLCertificateFile "D:/xampp/apache/cert/abc.com_public.crt"
#SSLCertificateFile "conf/ssl.crt/server.crt"

SSLCertificateKeyFile "D:/xampp/apache/cert/abc.com.key"
#SSLCertificateKeyFile "conf/ssl.key/server.key"

#SSLCertificateChainFile "D:/xampp/apache/cert/abc.com_chain.crt"
#SSLCACertificatePath "conf/ssl.crt"

<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>

<Directory "D:/xampp/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

CustomLog "D:/xampp/apache/logs/ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>                                  
一些解释

这里为abc.com下面的子域名dev.abc.com配置了SSL证书。

DocumentRoot设置你需要通过HTTP访问的文档根路径。

ProxyPass和ProxyPassReverse额外配置了一个反向代理,将对dev.abc.com/tc路径下的所有请求,转到本机的8989端口上(比如Tomcat在该端口上提供HTTP服务)。

以上配置正确,重启XAMPP Apache服务,就可以https方式访问DocumentRoot下的内容了。