×

分享使用 Let's Encrypt SSL 证书遇到的一些麻烦事

作者:Terry2021.06.23来源:Web前端之家浏览:7776评论:0
关键词:sslLet'sEncrypt

500.jpg

提到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证书了,如下图:

11.jpg

宝塔可以免费生成证书,如需使用其他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群,或者留言。

您的支持是我们创作的动力!
温馨提示:本文作者系Terry ,经Web前端之家编辑修改或补充,转载请注明出处和本文链接:
https://jiangweishan.com/article/ssl20210623sdf.html

网友评论文明上网理性发言 已有0人参与

发表评论: