
拜读了 屈光宇 老师的文章:Let's Encrypt,免费好用的 HTTPS 证书 后,决定将自己的网站实现全站HTTPS,采用的工具是 acme.sh ,申请的是 Let's Encrypt 的免费HTTPS证书。
准备工作
安装OpenSSL
Centos
yum install openssl
Ubuntu
sudo apt-get openssl
安装acme.sh
选择服务器的一个目录存放 acme.sh
curl https://get.acme.sh | sh
获取证书
由于我的服务器部署在阿里云,访问 Let's Encrypt 获取证书会访问超时。。。
万幸的是 acme.sh 支持DNS模式,常用的 CloudFlare 、 DNSPod 、 CloudXNS 、阿里云 等DNS服务都支持,免去了访问超时的尴尬,每一种DNS服务的配置详见项目的主页,下面以 CloudXNS 为例来为 nmchgx.com 和 www.nmchgx.com 获取证书。
配置CloudXNS授权
修改 account.conf
文件:
vim ~/.acme.sh/account.conf
在文件最后加入 CloudXNS 的 API KEY
和 SECRET KEY
:
CX_Key="[YOUR API KEY]"
CX_Secret="[YOUR SECRET KEY]"
保存即可。
获取多个子域名证书
acme.sh 可以一次获取多个子域名证书:
sh acme.sh --issue --dns dns_cx \
-d nmchgx.com \
-d www.nmchgx.com \
等到程序跑完后,若获取成功,再将证书保存到我们要存放的位置并重启服务器:
nginx
sh acme.sh --installcert -d nmchgx.com \
--keypath /var/www/ssl/domain.key \
--fullchainpath /var/www/ssl/chained.pem \
--reloadcmd "service nginx force-reload"
Apache
sh acme.sh --installcert -d nmchgx.com \
--keypath /var/www/ssl/domain.key \
--fullchainpath /var/www/ssl/chained.pem \
--reloadcmd "service apache2 force-reload"
启用HTTPS服务
与HTTP的URL由“
http://
”起始且默认使用端口80不同,HTTPS的URL由“https://
”起始且默认使用端口443。 — by Wikipedia
我们需要修改服务器的配置文件启用HTTPS,下面以nginx为例,将所有访问跳转到 https://nmchgx.com :
#
# The default server
#
server {
listen 443 ssl;
server_name www.nmchgx.com nmchgx.com;
ssl_certificate /var/www/ssl/chained.pem;
ssl_certificate_key /var/www/ssl/domain.key;
if ($host != 'nmchgx.com' ) {
rewrite ^/(.*)$ https://nmchgx.com/$1 permanent;
}
location / {
proxy_set_header Host nmchgx.com;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:2368;
}
}
server {
listen 80;
server_name *.nmchgx.com nmchgx.com;
return 301 https://$host$request_uri;
}
配置好后,重启服务器即可:
service nginx restart
网友评论