在Amazon Linux 上使用 Let's encrypt 免费的SSL

在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-auto
chmod 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.pem
Private 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才行。

参考资料:

古典占星 。师从台湾杨国正老师。|| 占星看盘请私信。|| 伟大的灵魂都是雌雄同体 || 开放心态,契约精神

71 声望
3 粉丝
0 条评论
推荐阅读
Apache Shiro 配置 LDAP 验证
通常在根据LDAP进行身份验证时一般进行以下三步: 利用一个LDAP用户的用户名和密码绑定到LDAP服务器。 在LDAP中检索一个用户的条目,然后将提供的密码和检索到的LDAP记录中进行验证。 根据LDAP提供的记录,再去本...

openmartin1阅读 4.6k

把 Go 放到 Nginx C module 之中
最近一段时间,我在做一件有趣的事情,让一个 Nginx C module 通过 Go 代码来访问 gRPC 服务。不得不感慨 Go 真的很流行,让人无法拒绝。之前我做 wasm-nginx-module 时就试图把 tinygo 跑在 Nginx 里面,这次则...

spacewander2阅读 2.1k评论 2

化虹为桥 - Nginx 如何代理 UDP “连接”
众所周知,UDP 并不像 TCP 那样是基于连接的。但有些时候,我们需要往一个固定的地址发送多个 UDP 来完成一个 UDP 请求。为了保证服务端能够知道这几个 UDP 包构成同一个会话,我们需要在发送 UDP 包时绑定某个端...

spacewander4阅读 813

[nginx] 实现域名代理
业务场景有两个系统A、B,A、B两系统均有独立域名,但对外只想暴露A域名。需要实现通过 A域名+B系统子路由 访问 系统B的子页面,图示如下。

DiracKeeko阅读 887

前端跨域问题解决办法, Nginx配置为例
💡 Tips:可以将多个系统融合成一个系统,无技术壁垒,可以像iframe一样实现功能组合● qiankun (阿里支持)● micro-app (京东支持)● wujie (腾讯支持)本人推荐● lingjie 携程支持

smallStone阅读 847

使用Python查询国内 COVID-19 疫情
有时我们只是想要一个速的工具来告诉当前疫情的情况,我们只需要最少的数据。 使用Python语言和tkinter图形化显示数据。首先,我们使用 Tkinter 库使我们的脚本可以图形化显示。使用 requests 库从 丁香园 获取数...

刘遄阅读 833

封面图
gitlab-ce使用nginx做反向代理的方式启用https
由于某些未知的原因,gitlab-ce的https近期出现了问题,被chrome识别出是非安全的连接。索性我们将了gitlab-ce的https改为http。但当下https基本上已经成为了标准,不启用https好像有点说不过去。

myskies阅读 765

古典占星 。师从台湾杨国正老师。|| 占星看盘请私信。|| 伟大的灵魂都是雌雄同体 || 开放心态,契约精神

71 声望
3 粉丝
宣传栏