Apache服务器配置HTTPS详细步骤:SSL证书安装全流程
Apache跑了好几年,现在要加HTTPS,动哪些配置才不会把现有站点搞挂?这事儿说难不难,但顺序搞反了容易出问题。
第一步:确认mod_ssl模块已启用
Apache处理HTTPS靠的是mod_ssl模块,不是装了就自动开的。在服务器上执行httpd -M | grep ssl或者apachectl -M | grep ssl,看看输出里有没有ssl_module。如果没有,需要手动启用:CentOS下执行yum install mod_ssl,Ubuntu下执行a2enmod ssl。装完之后别急着重启,先把证书文件准备好。
第二步:放置证书文件
Apache需要三个文件:域名证书、私钥、中间证书。建议在/etc/httpd/ssl/或/etc/apache2/ssl/目录下集中存放。文件名最好带域名标识,比如example.com.crt、example.com.key、example.com-chain.crt,方便后期多个站点管理。
有个细节注意一下:有些CA发的证书文件里已经包含了中间证书,这种情况下就不需要单独配置SSLCertificateChainFile指令了。你可以用文本编辑器打开证书文件,看看里面是不是有两段BEGIN CERTIFICATE,如果有就是已经合并好的。
第三步:编辑虚拟主机配置
找到你的SSL虚拟主机配置文件,通常在/etc/httpd/conf.d/ssl.conf或/etc/apache2/sites-available/default-ssl.conf。核心配置项如下:
<VirtualHost *:443> ServerName your_domain.com DocumentRoot /var/www/html SSLEngine on SSLCertificateFile /etc/httpd/ssl/your_domain.crt SSLCertificateKeyFile /etc/httpd/ssl/your_domain.key SSLCertificateChainFile /etc/httpd/ssl/your_domain-chain.crt</VirtualHost>
如果你是在同一个Apache上跑多个HTTPS站点,记得开启SNI支持。Apache 2.2.12以上版本默认支持,配置时每个站点单独写一个VirtualHost *:443块就行。
第四步:测试与重启
配置文件改完,先做语法检查:apachectl configtest或httpd -t。输出Syntax OK才能继续。然后执行systemctl restart httpd或systemctl restart apache2重启服务。
如果重启后网站打不开,80%的概率是证书文件路径写错了,或者私钥和证书不匹配。验证匹配性的方法:openssl x509 -in your_domain.crt -modulus -noout | md5sum和openssl rsa -in your_domain.key -modulus -noout | md5sum,两个MD5值一致就说明配对了。
最后别忘了在防火墙上放行443端口,firewall-cmd --add-service=https --permanent && firewall-cmd --reload。这一步漏了的话,外面怎么都访问不了你的HTTPS站点。