使用Let’s Encrypt(certbot)为你的网站生成免费的 SSL 证书
文章目录
— 2018.08.15更新
推荐使用acme.sh,教材参考:申请Let’s Encrypt通配符HTTPS证书
简单易用,且没有cerbot的各种安装问题,连证书的自动更新都不必操心!
关于HTTPS
引维基百科的说法
超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS)是一种网络安全传输协议。在计算机网络上,HTTPS经由超文本传输协议进行通信,但利用SSL/TLS来对数据包进行加密。HTTPS开发的主要目的,是提供对网络服务器的身份认证,保护交换数据的隐私与完整性
HTTPS的主要思想是在不安全的网络上创建一安全信道,并可在使用适当的加密包和服务器证书可被验证且可被信任时,对窃听和中间人攻击提供合理的防护。
关于TLS/SSL
依然引用维基百科
传输层安全协议(英语:Transport Layer Security,缩写:TLS),及其前身安全套接层(Secure Sockets Layer,缩写:SSL)是一种安全协议,目的是为互联网通信,提供安全及数据完整性保障
相关算法
TLS利用密钥算法在互联网上提供端点身份认证与通讯保密,其基础是公钥基础设施。
TLS包含三个基本阶段:
- 对等协商支持的密钥算法
- 基于非对称密钥的信息传输加密和身份认证、基于PKI证书的身份认证
- 基于对称密钥的数据传输保密
国内现状
由于运营商的劫持,国内公司不堪其扰,纷纷将全站采用https
安装配置
- wget https://dl.eff.org/certbot-auto
- chmod a+x ./certbot-auto
- ./certbot-auto –help all
- ./certbot-auto certonly –standalone –email wwj@example.com -d www.just4fun.site (可以使用二级域名)
如果最后一条命令报错:setuptools pkg_resources pip wheel failed with error code 2
解决方案是:
1 2 3 4 5 |
sudo apt-get install letsencryp sudo apt-get purge python-virtualenv python3-virtualenv virtualenv sudo pip install virtualenv |
需要注意的是,验证的时候保证80/443端口对外开放,且不被占用,如果这些端口实现被nginx占用,先停掉nginx
完成后查看生成的证书:
- sudo tree /etc/letsencrypt/live/
证书续签
证书的失效期是3个月,
续签的命令为:
- ./certbot-auto renew 或
- ./certbot-auto renew –standalone –pre-hook “service nginx stop” –post-hook “service nginx start”
可以用cron添加一个定时任务,自动续签。
将证书用于nginx
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 |
:::text upstream minio_server { server 127.0.0.1:9000 fail_timeout=0; } # 监听 HTTPS 请求 server { #server_name example.com; listen 8443 ssl; # TLS 基本设置 ssl_certificate /etc/letsencrypt/live/www.just4fun.site/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.just4fun.site/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 网站的其它设置不变 # [...] location / { try_files $uri @proxy_to_app; } # No basic auth security on the heartbeat url, so that ELB can use it location @proxy_to_app { proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto; proxy_set_header X-Forwarded-Port $http_x_forwarded_port; proxy_set_header X-Forwarded-For $http_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://minio_server; } } |
当然我们可以将任意端口用于https,不过证书无法移植到其他服务器(可能是我还不熟悉)
访问https://www.just4fun.site:18443,一切正常(我在青云的路由器上将8443端口映射为18443)
参考
- 超文本传输安全协议
- 传输层安全协议
- SSL/TLS协议运行机制的概述
- certbot
- 使用 Let’s Encrypt 生成免费的 SSL 证书
- Certbot:自动部署 Let’s Encrypt 证书
- Let’s Encrypt 终于支持通配符证书了
- –no-bootstrap 不检测系统依赖 –verbose pip详细输出
- 申请Let’s Encrypt通配符HTTPS证书
文章作者 种瓜
上次更新 2016-06-19