apache环境如何安装SSL证书实现https访问
Apache和Nginx环境目前使用量占据PHP网站的大部分市场,今天跟着华籁一起来仔细的看一下如何在Apache环境中实现SSL证书的安装,最终实现https://形式的访问。Nginx环境下的配置我们明天发布敬请关注。
Apache格式的证书解压后应包含三个文件:
domain.com.crt (域名证书,也可能是pem格式)
domain.com.key (私钥文件)
domain.com-ca-bundle.crt (根证书链,也可能是其他文件名,一般带有 ca 或者 chain )
第一步
把证书放在apache的conf/ssl目录下,如果conf目录里没有ssl目录,可以新建一个
放在conf/ssl可以用相对路径,其他位置需要用绝对路径
第二步
找到站点的80端口配置,一般在conf/vhosts.conf文件里(有的是在conf/extra/httpd-vhosts.conf),比如下面这一段
<VirtualHost *:80>
ServerName hualay.net
ServerAlias www.hualay.net
DocumentRoot /www/wwwroot
#其他的配置信息···
</VirtualHost>
第三步
在vhosts.conf同级目录里,新建一个vhosts-https.conf文件,复制80端口配置过来进行修改,添加ssl配置
<VirtualHost *:443>
ServerName hualay.net
ServerAlias www.hualay.net
DocumentRoot /www/wwwroot
#不同证书文件名和后缀可能不同 修改文件名为apache的3个实际文件名即可
SSLEngine on
SSLCertificateFile conf/ssl/hualay.net.crt
SSLCertificateKeyFile conf/ssl/hualay.net.key
SSLCertificateChainFile conf/ssl/hualay.net-ca-bundle.crt
#其他的配置信息···
</VirtualHost>
第四步
打开conf目录里的httpd.conf文件,找到 Include conf/vhosts.conf 在下面添加
#这一行一般在文件后面,从后面更容易找到
Include conf/vhosts.conf
#下面是添加的
Include conf/vhosts-https.conf
Listen 443
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
配置完成
重启Apache使其生效
使用https://domain.com 测试是否可以访问
配置完成如果apache无法启动,先检查是否加载 mod_ssl.so 模块的问题
Linux 检查 mod_ssl.so模块
Linux系统检测方法使用以下命令:
find / -name mod_ssl.so | grep modules/mod_ssl.so
如果能查找到 mod_ssl.so 一般情况下已经安装了mod_ssl.so模块
如果没有找到,可以用下面的命令安装
CentOS/Redhat安装mod_ssl.so
yum install mod_ssl
Debian/Ubuntu
sudo a2enmod ssl
sudo service apache2 restart
打开httpd.conf文件查看是否加载ssl模块
LoadModule ssl_module modules/mod_ssl.so (如果前面有#号要去掉)
Windows 检查 mod_ssl.so模块
Windows一般只需要打开httpd.conf文件查看是否加载ssl模块
LoadModule ssl_module modules/mod_ssl.so (如果前面有#号要去掉)
Apache自动跳转到 HTTPS
网站根目录新建 .htaccess
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]
站点绑定多个域名,只允许www.example.com 跳转
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HTTP_HOST} ^example.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]
都跳转到https://www.example.com
RewriteEngine On
RewriteCond %{SERVER_PORT} 80 [NC,OR]
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
###把网址更改为自己的###
高级用法 (可选)
RewriteEngine on
# 强制HTTPS
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{SERVER_PORT} 80
# 某些页面强制
RewriteCond %{REQUEST_URI} ^something_secure [OR]
RewriteCond %{REQUEST_URI} ^something_else_secure
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
# 强制HTTP
RewriteCond %{HTTPS} =on [OR]
RewriteCond %{SERVER_PORT} 443
# 某些页面强制
RewriteCond %{REQUEST_URI} ^something_public [OR]
RewriteCond %{REQUEST_URI} ^something_else_public
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
# ThinkPHP 跳转 添加到规则后
RewriteCond %{SERVER_PORT} 80
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]