启用阿里免费证书
申请证书
查看:申请免费DV试用证书
安装证书
基本操作参考:在Nginx/Tengine服务器上安装证书,这里具体讲下Nginx上的配置。
1.在nginx根目录(默认为/etc/nginx)下创建目录cert。
1 2
| cd /etc/nginx mkdir cert
|
2.把下载的证书两个文件.pem和.key上传到目录cert中。
3.修改nginx配置文件。vi /etc/nginx/conf.d/hexo.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| server { listen 80; server_name bore.vip www.bore.vip; rewrite ^(.*)$ https://$server_name$1 permanent; } server { listen 443; root /var/www/hexo; server_name bore.vip www.bore.vip; ssl on; ssl_certificate /etc/nginx/cert/xxxx.pem; ssl_certificate_key /etc/nginx/cert/xxxx.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_ciphers on; access_log /var/log/nginx/hexo_access.log; error_log /var/log/nginx/hexo_error.log; error_page 404 = /404.html; location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ { root /var/www/hexo; access_log off; expires 1d; } location ~* ^.+\.(css|js|txt|xml|swf|wav)$ { root /var/www/hexo; access_log off; expires 10m; } location / { root /var/www/hexo; if (-f $request_filename) { rewrite ^/(.*)$ /$1 break; } } location /nginx_status { stub_status on; access_log off; } }
|
4.修改hugo站点配置文件_config.toml
baseURL = "https://bore.vip/"
5.开启负载均衡
在阿里云SSl证书控制台,依次选择部署—负载均衡—选择所有区域
,然后部署。
6.重启nginx服务。
ubuntu、centos 6
/etc/init.d/nginx restart
centos 7、8
添加 Let’s Encrypt 免费证书
Ubuntu上的操作
安装 Certbot
在 Ubuntu 上只需要简单的一行命令:
sudo apt-get install letsencrypt
其他的发行版可以在这里选择。
使用 webroot 自动生成证书
Certbot 支持多种不同的「插件」来获取证书,这里选择使用 webroot 插件,它可以在不停止 Web 服务器的前提下自动生成证书,使用 --webroot
参数指定网站的根目录。
letsencrypt certonly --webroot -w /var/www/hexo -d iwyang.top
这样,在 /var/www/hexo 目录下创建临时文件 .well-known/acme-challenge ,通过这个文件来证明对域名 iwyang.top 的控制权,然后 Let’s Encrypt 验证服务器发出 HTTP 请求,验证每个请求的域的 DNS 解析,验证成功即颁发证书。
生成的 pem 和 key 在 /etc/letsencrypt/live/
目录下
cert.pem 用户证书
chain.pem 中间证书
fullchain.pem 证书链, chain.pem + cert.pem
privkey.pem 证书私钥
`
自动续期
Let’s Encrypt 的证书有效期为 90 天,不过我们可以通过 crontab 定时运行命令更新证书。
先运行以下命令来测试证书的自动更新:
letsencrypt renew --dry-run --agree-tos
如果一切正常,就可以编辑 crontab 定期运行以下命令:
1 2
| crontab -e * 2 * * * service nginx stop & letsencrypt renew & service nginx start
|
配置 Nginx
修改 Nginx 配置文件中关于证书的配置:
1
| vi /etc/nginx/conf.d/hexo.conf
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| server { listen 80; server_name iwyang.top www.iwyang.top; rewrite ^(.*)$ https://$server_name$1 permanent; } server { listen 443; root /var/www/hexo; server_name iwyang.top www.iwyang.top; ssl on; ssl_certificate /etc/letsencrypt/live/iwyang.top/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/iwyang.top/privkey.pem; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_ciphers on; access_log /var/log/nginx/hexo_access.log; error_log /var/log/nginx/hexo_error.log; error_page 404 = /404.html; location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ { root /var/www/hexo; access_log off; expires 1d; } location ~* ^.+\.(css|js|txt|xml|swf|wav)$ { root /var/www/hexo; access_log off; expires 10m; } location / { root /var/www/hexo; if (-f $request_filename) { rewrite ^/(.*)$ /$1 break; } } location /nginx_status { stub_status on; access_log off; } }
|
然后重启 Nginx ,应该就可以看到小绿标了。/etc/init.d/nginx restart
Centos 8上的操作
安装Certbot
1 2
| yum install epel-release -y yum install certbot -y
|
然后执行:
1
| certbot certonly --webroot -w /var/www/hexo -d bore.vip -m 455343442@qq.com --agree-tos
|
配置Nginx
顶级域名参考上面Ubuntu Nginx的配置,二级域名操作如下:
1
| vi /etc/nginx/conf.d/hexo.conf
|
现在用的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| server { listen 80; listen 127.0.0.1:443 ssl http2 proxy_protocol; root /var/www/hexo; server_name bore.vip www.bore.vip; if ($host != 'bore.vip' ) { rewrite ^/(.*)$ https://bore.vip/$1 permanent; } if ($ssl_protocol = "") { return 301 https://$host$request_uri; } ssl on; ssl_certificate /etc/letsencrypt/live/bore.vip/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/bore.vip/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_timeout 10m; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_buffer_size 1400; add_header Strict-Transport-Security max-age=15768000; ssl_stapling on; ssl_stapling_verify on; access_log /var/log/nginx/hexo_access.log; error_log /var/log/nginx/hexo_error.log; error_page 404 = /404.html; location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ { root /var/www/hexo; access_log off; expires 1d; } location ~* ^.+\.(css|js|txt|xml|swf|wav)$ { root /var/www/hexo; access_log off; expires 10m; } location / { root /var/www/hexo; if (-f $request_filename) { rewrite ^/(.*)$ /$1 break; } } location /nginx_status { stub_status on; access_log off; } }
|
以前用的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| server { listen 80; server_name bore.vip www.bore.vip; rewrite ^(.*)$ https://$server_name$1 permanent; } server { listen 443; root /var/www/hexo; server_name bore.vip www.bore.vip; ssl on; ssl_certificate /etc/letsencrypt/live/bore.vip/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/bore.vip/privkey.pem; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_ciphers on; access_log /var/log/nginx/hexo_access.log; error_log /var/log/nginx/hexo_error.log; error_page 404 = /404.html; location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ { root /var/www/hexo; access_log off; expires 1d; } location ~* ^.+\.(css|js|txt|xml|swf|wav)$ { root /var/www/hexo; access_log off; expires 10m; } location / { root /var/www/hexo; if (-f $request_filename) { rewrite ^/(.*)$ /$1 break; } } location /nginx_status { stub_status on; access_log off; } }
|
重启Nginx生效:
证书自动更新
由于这个证书的时效只有 90 天,我们需要设置自动更新的功能,帮我们自动更新证书的时效。首先先在命令行模拟证书更新:
模拟更新成功的效果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates below have not been saved.)
The following certs were successfully renewed: /etc/letsencrypt/live/blog.bore.vip/fullchain.pem (success) /etc/letsencrypt/live/f.bore.vip/fullchain.pem (success)
The following certs could not be renewed: /etc/letsencrypt/live/novel.bore.vip/fullchain.pem (failure) ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates above have not been saved.) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
在无法确认你的 nginx 配置是否正确时,一定要运行模拟更新命令,确保certbot和服务器通讯正常。使用 crontab -e 的命令来启用自动任务,命令行:
添加配置:(每隔两个月凌晨2:30自动执行证书更新操作)后保存退出。
1
| 30 2 * */2 * /usr/bin/certbot renew --quiet && /bin/systemctl restart nginx
|
查看证书有效期的命令:
1
| openssl x509 -noout -dates -in /etc/letsencrypt/live/bore.vip/cert.pem
|
Debian10上的操作
安装 Certbot
1
| sudo apt-get install letsencrypt -y
|
使用 webroot 自动生成证书
1
| certbot certonly --webroot -w /var/www/hexo -d bore.vip -m 455343442@qq.com --agree-tos
|
编辑Nginx
1
| vi /etc/nginx/conf.d/hexo.conf
|
hexo用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| server { listen 80; listen [::]:80; root /var/www/hexo; server_name bore.vip www.bore.vip; if ($host != 'bore.vip' ) { rewrite ^/(.*)$ https://bore.vip/$1 permanent; } listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/bore.vip/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/bore.vip/privkey.pem;
if ($scheme != "https") { return 301 https://$host$request_uri; } }
|
现在用的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| server { listen 80; listen 127.0.0.1:443 ssl http2 proxy_protocol; set_real_ip_from 127.0.0.1; real_ip_header proxy_protocol; root /var/www/hexo; server_name bore.vip www.bore.vip; if ($host != 'bore.vip' ) { rewrite ^/(.*)$ https://bore.vip/$1 permanent; } if ($ssl_protocol = "") { return 301 https://$host$request_uri; } ssl_certificate /etc/letsencrypt/live/bore.vip/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/bore.vip/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_timeout 10m; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_buffer_size 1400; add_header Strict-Transport-Security max-age=15768000; ssl_stapling on; ssl_stapling_verify on; access_log /var/log/nginx/hexo_access.log; error_log /var/log/nginx/hexo_error.log; error_page 404 = /404.html; location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ { root /var/www/hexo; access_log off; expires 1d; } location ~* ^.+\.(css|js|txt|xml|swf|wav)$ { root /var/www/hexo; access_log off; expires 10m; } location / { root /var/www/hexo; if (-f $request_filename) { rewrite ^/(.*)$ /$1 break; } } location /nginx_status { stub_status on; access_log off; } }
|
以前用的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| server { listen 80; server_name bore.vip www.bore.vip; rewrite ^(.*)$ https://$server_name$1 permanent; } server { listen 443; root /var/www/hexo; server_name bore.vip www.bore.vip; ssl on; ssl_certificate /etc/letsencrypt/live/bore.vip/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/bore.vip/privkey.pem; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_ciphers on; access_log /var/log/nginx/hexo_access.log; error_log /var/log/nginx/hexo_error.log; error_page 404 = /404.html; location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ { root /var/www/hexo; access_log off; expires 1d; } location ~* ^.+\.(css|js|txt|xml|swf|wav)$ { root /var/www/hexo; access_log off; expires 10m; } location / { root /var/www/hexo; if (-f $request_filename) { rewrite ^/(.*)$ /$1 break; } } location /nginx_status { stub_status on; access_log off; } }
|
测试配置是否有问题:
重启Nginx生效:
自动续期
Let’s Encrypt 的证书有效期为 90 天,不过我们可以通过 crontab 定时运行命令更新证书。
先运行以下命令来测试证书的自动更新:
如果一切正常,就可以编辑 crontab 定期运行以下命令:
1
| 30 2 * */2 * /usr/bin/certbot renew --quiet && /bin/systemctl restart nginx
|
查看证书有效期的命令:
1
| openssl x509 -noout -dates -in /etc/letsencrypt/live/bore.vip/cert.pem
|
https www跳转
1 2 3 4 5 6 7 8 9 10 11 12
| upstream halo { server 127.0.0.1:8090; } server { listen 80; listen [::]:80; listen 443 ssl http2; listen [::]:443 ssl http2; server_name bore.vip www.bore.vip; + if ($host != 'bore.vip' ) { + rewrite ^/(.*)$ https://bore.vip/$1 permanent; + }
|
参考链接