提到SSL,相信大家都不会陌生,SSL分为两种:免费和收费。如果您有购买和维护服务器的经验,就会了解到,现在购买服务器有些会送SSL服务以及证书。但是如果没送呢?那么就需要我们自己配置。这个问题就是我们今天要探讨的主题,当然我们今天讨论的是免费的SSL证书 - Let's Encrypt(收费的都会有人为你服务,其实配置都差不多,参考)。我们先来了解下Let's Encrypt。
Let's Encrypt介绍
Let's Encrypt 是一个免费、自动化和开放的证书颁发机构 (CA),为公众谋福利。它是由Internet Security Research Group (ISRG)提供的一项服务。
我们向人们提供他们需要的数字证书,以便以我们能做到的最人性化的方式免费为网站启用 HTTPS (SSL/TLS)。我们这样做是因为我们想要创建一个更安全、更尊重隐私的 Web。
Let's Encrypt 的基本原则为:
-
免费:任何拥有网域名称的人都可以免费使用Let's Encrypt取得可信任的凭证。
-
自动化:运行于网页伺服器上的程式可以透过与Let's Encrypt沟通,轻松地获取凭证,安全地设定并使用它,并且自动进行凭证更新。
-
安全: Let's Encrypt将是推动TLS安全的最佳平台,无论是在CA方面,还是帮助网站营运者正确地保护他们的伺服器。
-
透明:公开记录所有颁发或注销的凭证,供任何人查阅。
-
公开:公开自动颁发和更新协议,作为他人可以使用的开放标准。
-
合作: Let's Encrypt是一个为了网路社群利益所做的共同努力,就像网路底层协议一样,不受任何单一组织的控制。
使用第三方平台配置SSL
随着互联网发展,使得我们在配置服务器的时候会有很多平台可以参考,比如知名的宝塔,云平台Cloudflare等等。通过这些平台,我们可以发获取免费的Let's Encrypt证书,并且自动更新,大家都知道免费的Let's Encrypt证书只有三个月有效期。
宝塔面板
如果您服务器上安装了宝塔面板,就可以很轻松的配置SSL证书了,如下图:
宝塔可以免费生成证书,如需使用其他SSL,请切换其他证书后粘贴您的KEY以及PEM内容,然后保存即可。如开启后无法使用HTTPS访问,请检查安全组是否正确放行443端口。
当然你也可以使用其他证书,直接导入进来就可以了,很简单,这里就不一一说明了。
云平台Cloudflare
Cloudflare 既能保护您的对外资源(例如网站、API 和应用程序)并确保其可靠性,还可以保护您的内部资源,例如防火墙后的应用程序、团队和设备。它也是您开发全球可扩展应用程序的平台。他也可以是自动更新您的Let's Encrypt免费证书。
不适用第三平台配置SSL
其实,使用第三方平台,会占用服务器的资源,所以有时候需要我们自己去配置一些设置。那么如何去配置SSL证书呢。之前也分享过一些文章,大家也可以参考下:
您要使用"Node.js配置NGINX和SSL"的知识点都在这里了
关于SSL证书免费申请、安装以及https配置的一些经验总结
如何在windows服务器上完成安装SSL证书以及HTTPS配置
我们今天拿AWS linux服务器来实例说明。
在Amazon Linux 上 使用 Let's encrypt 免费的SSL
如果你使用ELB来做负载均衡,在AWS上可以很方便的使用SSL。如果不使用ELB就需要自己来配置SSL。
Let's encrypt 提供期限为三个月的免费SSL证书,到期之后需要renew,官方还提供自动renew的工具certbot
certbot
certbot 是一个自动申请和续期SSL证书的工具。在官网certbot.eff.org可以找到各种OS和Web服务器下的安装方法。常见的Ubuntu和CentOS安装起来十分方便。
Amazon Linux
在AWS EC2上,官方推荐的是OS是Amazon Linux,基于RHEL 6源码重新编译的,提供了Amazon自己的工具和源。certbot的安装方式类似于RHEL 6/CentOS 6
申请SSL证书步骤
-
ssh到Server
-
下载certbot
wget https://dl.eff.org/certbot-autochmod a+x certbot-auto
- 执行certbot
sudo ./certbot-auto --debug -v --server https://acme-v01.api.letsencrypt.org/directory certonly -d YOUR_WEBSITE_HERE
- 验证
How would you like to authenticate with the ACME CA?
---------------------------1: Place files in webroot directory (webroot)2: Spin up a temporary webserver (standalone)
---------------------------
选择1certbot会把一个验证文件放到webroot下,所以需要配置一下nginx的默认静态目录
选择2certbot会启动一个web服务,占用443端口,所以需要暂停一下nginx,一般情况下选择2比较省事。
记得在AWS EC2的安全组中放开443端口
- 证书路径
Certificate: /etc/letsencrypt/live/YOUR_WEBSITE_HERE/cert.pem
Full Chain: /etc/letsencrypt/live/YOUR_WEBSITE_HERE/fullchain.pemPrivate Key: /etc/letsencrypt/live/YOUR_WEBSITE_HERE/privkey.pem
nginx 启用SSL
启用SSL之后,http需要默认跳转到https,还有SSL证书的配置,下面是个配置的例子
server {
listen 80;
server_name YOUR_WEBSITE_HERE;
# Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
return 301 https://YOUR_WEBSITE_HERE$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name YOUR_WEBSITE_HERE;
# certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
ssl_certificate /etc/letsencrypt/live/YOUR_WEBSITE_HERE/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/YOUR_WEBSITE_HERE/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
access_log /var/log/nginx/YOUR_WEBSITE_HERE-access.log;
error_log /var/log/nginx/YOUR_WEBSITE_HERE-error.log;
location / {
proxy_pass http://127.0.0.1:8003;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
自动更新证书
- 使用root用户
sudo -i
- 增加定时任务
crontab -e
增加一行,每个月1号2点30分更新
30 2 1 * * /path/to/certbot-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start"
- dry run
./path/to/certbot-auto renew --dry-run
chrome 变绿
在chrome下需要全站都使用https地址栏才会变绿,需要检查一下网站里面的各种URL,比如外链图片或JS文件,都需要使用https才行。
扩展
如果您在使用GHOST CMS,那么安装和更新Let's encrypt 免费的SSL,如何操作呢?
1、安装SSL。
ghost setup ssl
一般免费的不会自动给你更新,您只有三个月的有效期,所以到了快3个月的时候,需要手动去操作,分享下步骤。
2、更新
SSH 到您的实例并切换到 ghost 的用户。
然后按照这些命令:
1)安装最新的ghost-cli
sudo npm i -g ghost-cli@latest
2)更新证书
ghost setup ssl-renew
3)切换到root用户
sudo su
4)升级letsencrypt里面的acme.sh
"/etc/letsencrypt"/acme.sh --upgrade --home "/etc/letsencrypt"
5)通过acme.sh更新SSL
"/etc/letsencrypt"/acme.sh --cron --home "/etc/letsencrypt" --debug --log
总结
SSL证书的配置,就分享这么多,因为涉及到的内容太多,不能一一说明,如果你有问题,可以加QQ群,或者留言。