阿里云服务器使用免费的 CA 证书部署 HTTPS
本文示例服务器环境:
CentOS 7.2 Apache 2.4 PHP 5.6
如果服务器环境不一样,可能会有出入。
1. 阿里云申请免费 CA 证书
如下图购买免费 CA 证书,没什么过多解释了。
购买成功之后会在证书控制台看到补全证书信息的链接,点击去补全即可,如下图:
如果选择了“证书绑定的域名在【阿里云的云解析】产品中...”那个选项,是代表要绑定的域名是在当前申请证书的这个阿里云账户下,如果不在的话,则需要自己去域名管理处添加一条 TXT 的域名解析记录,如下图:
记录类型,主机记录,记录值都在审核进度里显示,填到域名解析里即可。
域名解析填写完成之后,点击上图最下面右侧的“检查配置”,如果左侧显示配置没问题了,就正式提交审核了。
审核完成后对应的证书的状态会变为“已签发”,如下图:
已签发之后,就可以点击右侧的下载按钮下载证书,去服务器配置了。
2. 服务器配置 CA 证书
Apache 服务器配置
首先下载证书,如下图:
下载证书之后,放到 Apache 安装根目录(/etc/httpd)下,可以直接在服务器上使用wget下载,也可以下载到本地,使用 SCP 上传到阿里云服务器:
scp Downloads/21427xxxx63xxx1.zip root@xx.1xx.xx6.xxx:/etc/httpd
接下来就和阿里云的指南不一样了。
下面这两行你会发现 httpd.conf 里没有,因为 CentOS 已经集成了 openssl,我们要做的是手动安装 mod_ssl 模块。
安装 mod_ssl 模块命令如下:
yum install mod_ssl
安装完成之后,编辑 ssl.conf 文件:
vim /etc/httpd/conf.d/ssl.conf
按下图配置这四个位置:
如果网站的默认目录有改过,记得在这个文件里改一下 443 端口对应的网站默认目录和域名。
然后重启 Apache:
systemctl restart httpd
至此大功告成。
Apache 下 HTTP 默认转发到 HTTPS
如果想要 80 端口的 http 访问也转发到 https,打开Apache/conf/httpd.conf,找到 #LoadModule rewrite_module modules/mod_rewrite.so 去掉#号,打开重定向支持,然后找到你网站目录的<Directory>段,修改其中的 AllowOverride None 为 AllowOverride All,然后重启 Apache 。
在你网站目录下放一个.htaccess文件。
编辑器打开.htaccess文件,写入如下规则:
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} !^/tz.php
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R]
解释:
%{SERVER_PORT} —— 访问端口
%{REQUEST_URI} —— 比如如果url是 http://localhost/tz.php,则是指 /tz.php
%{SERVER_NAME} —— 比如如果url是 http://localhost/tz.php,则是指 localhost
以上规则的意思是,如果访问的url的端口不是443,且访问页面不是tz.php,则应用RewriteRule这条规则。这样便实现了:访问了http://localhost/index.php或者http://localhost/admin/index.php等页面的时候会自动跳转到https://localhost/index.php或者https://localhost/admin/index.php,但是访问http://localhost/tz.php的时候就不会做任何跳转,也就是说http://localhost/tz.php和https://localhost/tz.php两个地址都可以访问。
Nginx 服务器配置
如果没有使用虚拟机,则按照阿里云上的教程配置即可。即
如果使用了虚拟机,则在对应虚拟机配置文件上添加以下红色语句即可。
server {
listen 80;
listen 443 ssl;
server_name pastdust.com www.***.com;
root /www/web/pastdust_com/public_html;
index index.html index.php index.htm;
error_page 400 /errpage/400.html;
error_page 403 /errpage/403.html;
error_page 404 /errpage/404.html;
ssl_certificate cert/214356952770832.pem;
ssl_certificate_key cert/214356952770832.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
include rewrite/***.conf;
}
Nginx 下 HTTP 转发到 HTTPS
网站强制访问https模式,将以下的跳转代码添加到当前网站所有使用的伪静态规则conf文件中,即可实现所有的http访问都跳转到https访问,并且是继承目录的,具体实现方法就是把http模式访问301重定向到https模式。
if ($server_port = 80) {
return 301 https://$server_name$request_uri;
}
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
完。