傻瓜式十分钟免费开启 HTTPS,是时候为你的站点加上小绿锁了

简介: http://gold.xitu.io/entry/57df65690bd1d00057f9455b?from=singlemessage&isappinstalled=0 原文链接:https://laravel-china.org/topics/2766移动互联网时代,HTTPS 尤其重要,百度和谷歌等搜索引擎也对外宣称会提高 HTTPS 网站的权重。

http://gold.xitu.io/entry/57df65690bd1d00057f9455b?from=singlemessage&isappinstalled=0

 

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

Let's Encrypt,是2016年4月12日成立的一家证书授权中心,提供免费的传输层安全(TLS)X.509证书,通过自动化的过程消除目前安全网站证书需要手工创建,加密,签名,安装以及更新的复杂性。

一直以来都觉得浏览器网址开头的那把小绿锁很别致啊,现在Let's Encrypt横空出世提供免费证书,说明https势在必行,那我也来动手给博客加把锁吧,看着就安全是吧。

Let's Encrypt 的官网提供的脚本看起来更加自动化一些,但我没有亲自尝试,而是在Github上搜到了一个开源脚本acme-tiny,用下来之后成功将博客加密完成。

file

根据acme-tiny提供的说明文档和我自己的实施过程列出以下几步:

克隆脚本

sudo git clone https://github.com/diafygi/acme-tiny.git  
cd acme-tiny

创建Let's Encrypt私钥

openssl genrsa 4096 > account.key

创建CSR(Certificate Signing Request,证书签名请求) 文件

ACME协议 (Let's Encrypt所使用的) 需要一个csr文件,用来进行证书签名和证书更新。

将需要加密的域名加到下面的代码中,目前一张证书最多可以加密 100 个域名:

openssl genrsa 4096 > domain.key     
openssl req -new -sha256 -key domain.key -subj "/" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:yoursite.com,DNS:www.yoursite.com")) > domain.csr

证明你拥有该域名

acme-tiny脚本会生成验证文件并写入到你指定的目录下,然后通过 ".well-known/acme-challenge/" 这个URL来访问到验证文件. 注意: Let's Encrypt 会对你的服务器做一次http请求来进行验证,因此你需要保证80端口能够访问.

  • 手动生成challenges目录,用来存放验证文件(路径可以根据需要修改)

    mkdir -p /var/www/challenges

  • 配置nignx的80端口
    server {

        listen 80;
        server_name yoursite.com www.yoursite.com;
        return 301 https://yoursite.com$request_uri; # 注意进行301重定向到https,否则通过http仍能访问你的站点 location /.well-known/acme-challenge/ { alias /var/www/challenges/; try_files $uri =404; } #...你的其他配置 }

获取签名证书

sudo chmod +x acme_tiny.py  
python acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /var/www/challenges/ > ./signed.crt

安装证书

针对nginx, 你还需要将 Let's Encrypt 的中间件证书 intermediate.pem 内容附加在签名证书signed.crt之后:

    wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem  
    cat signed.crt intermediate.pem > chained.pem

    server {
        listen 443;
        server_name yoursite.com, www.yoursite.com;

        ssl on; ssl_certificate /path/to/chained.pem; ssl_certificate_key /path/to/domain.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA; ssl_session_cache shared:SSL:50m; ssl_prefer_server_ciphers on; #...你的其他配置 }

证书自动更新定时任务

恭喜!你的网站已经使用上了HTTPS。 但Let's Encrypt 证书有效期只有90天, 所以需要定期更新。现在只需要写一个更新脚本并把它放到定时任务中即可。

脚本内容:

    #!/usr/bin/sh

    python /path/to/acme_tiny.py --account-key /path/to/account.key --csr /path/to/domain.csr --acme-dir /var/www/challenges/ > /tmp/signed.crt || exit

    wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem

    cat /tmp/signed.crt intermediate.pem > /path/to/chained.pem service nginx reload

定时任务可以设置为每个月执行一次:
0 0 1 * * /path/to/renew_cert.sh 2>> /var/log/acme_tiny.log

原文链接:https://macken.me/article/encrypt-your-webiste-with-lets-encrypt

如何联系我:【万里虎】www.bravetiger.cn 【QQ】3396726884 (咨询问题100元起,帮助解决问题500元起) 【博客】http://www.cnblogs.com/kenshinobiy/
目录
相关文章
minio配置tls以开启https访问
minio配置tls以开启https访问
2280 0
Ingress 开启 TLS / HTTPS 被忽略的细节
我们之前接入层用的SLB>Nginx ,考虑到Ingress和k8s的集成,我们用Ingress替代了Nginx,测试同学反馈在低版本浏览器上报错。
4674 0
|
1月前
阿里云十分钟初审https://www.fcomcn.com
https://www.fcomcn.com 但是到现在十天了
29 0
|
Web App开发 缓存 网络协议
浏览器原理 03 # HTTP 请求流程:为什么很多站点第二次打开速度会很快?
浏览器原理 03 # HTTP 请求流程:为什么很多站点第二次打开速度会很快?
339 0
浏览器原理 03 # HTTP 请求流程:为什么很多站点第二次打开速度会很快?
|
Web App开发 tengine 网络协议
Tengine 使用 Brotli 开启TLS1.3 并优化 HTTPS 访问速度
本文介绍 Tengine 的编译安装,并启用 Brotli 压缩,配置开启 https。
347 0
Tengine 使用 Brotli 开启TLS1.3 并优化 HTTPS 访问速度
|
安全 应用服务中间件 网络安全
Nginx中安装免费SSL证书开启Https请求(下)
在部分场景中,我们必须使用 https 请求,因为 https 请求更为安全,常用于支付方面的请求调用
311 0
Nginx中安装免费SSL证书开启Https请求(下)
|
安全 应用服务中间件 网络安全
Nginx中安装免费SSL证书开启Https请求(上)
在部分场景中,我们必须使用 https 请求,因为 https 请求更为安全,常用于支付方面的请求调用
244 0
Nginx中安装免费SSL证书开启Https请求(上)
|
网络协议 安全 应用服务中间件
使用SSL证书,免费给个人网站开启HTTPS防护
以.com结尾的python-office.com则存在:部分浏览器默认使用https进行访问导致打不开网页的问题。
303 0
使用SSL证书,免费给个人网站开启HTTPS防护
|
运维 Java 应用服务中间件
关于tomcat 开启https配置
记录下关于通过tomcat来配置https ,使java web项目可以直接通过https来访问,之前的时候都是走nginx来配置https,由于特殊原因443端口不能开启(具体是啥不清楚,运维不让开),只能如此配置下。
关于tomcat 开启https配置