在 CentOS 上,Apache 通常叫 httpd(不是 apache2,apache2 是 Debian/Ubuntu 的叫法)。下面以 CentOS 7/8 + httpd 为例说明如何开启 SSL。
yum install mod_ssl -y
# CentOS 8 可用
# dnf install mod_ssl -y
安装后会生成:
/etc/httpd/conf.d/ssl.conf/etc/pki/tls/certs/localhost.crtopenssl req -new -x509 -days 365 -nodes \
-out /etc/pki/tls/certs/server.crt \
-keyout /etc/pki/tls/private/server.key
将你的:
xxx.crtxxx.keyca-bundle.crt(可选)放到:
/etc/pki/tls/certs/
/etc/pki/tls/private/
编辑或新建:
vi /etc/httpd/conf.d/ssl.conf
示例:
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /etc/pki/tls/private/server.key
# 如果有中间证书
# SSLCertificateChainFile /etc/pki/tls/certs/ca-bundle.crt
<Directory /var/www/html>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
(如果没开 firewalld 可忽略)
systemctl restart httpd
systemctl enable httpd
浏览器访问:
https://你的服务器IP或域名
或用命令:
curl -I https://localhost
在 httpd.conf 或 ssl.conf 中加:
<VirtualHost *:80>
ServerName www.example.com
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>
如果你用的是 CentOS Stream / Rocky / Alma / CentOS 6,或已有 Nginx 反向代理,可以告诉我,我可以给你对应配置。