当前位置: 首页 > 技术资讯 >

【教程】Let’s Encrypt免费HTTPS SSL证书获取教程

Let’s Encrypt是EFF、Mozilla、Cisco、Akamai、IdenTrust与密西根大学研究人员共同创立的组织,这是一个免费的凭证中心(Certification Authority,CA),目的在于推动全球所有的网站都使用HTTPS加密传输,并由非营利的网际网路安全研究组织Internet Security Research Group(ISRG)负责营运。

对于开发者来说,部署HTTPS是一个双赢的选择,用户可以借此获得更加安全的使用体验,而站点也能够抵御恶意软件的注入或广告追踪。Let’s Encrypt已于2015年12月3日进入公测(Public Beta),所有网站都可以免费获取Let’s Encrypt的证书。

据说Google优先收录带HTTPS加密的网站。

获取Let’s Encrypt证书
项目GitHub地址:https://github.com/letsencrypt/letsencrypt – > https://github.com/certbot/certbot

官方教程:https://certbot.eff.org/docs/using.html

2016年5月更新:

最近官方做了调整,简化了获取证书的难度,并将项目名改为了certbot,以下为全新安装方法:

wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto
./certbot-auto –help
等待安装依耐环境并初始化,然后直接看第四步。
4.运行客户端获取证书

获取证书有几种方案,官方已经开发了用于Apache服务器的插件,而Nginx的插件还是实验性功能。本文不探讨使用插件的方式,读者可以自行阅读官方的User Guide。

下面是两种通用获取方法,推荐使用 方案二。

方案一)获取证书时会使用80端口,如果你的服务器可以关闭,可以使用如下方式:

关闭占用80端口的服务器,比如Apache或者Nginx

service nginx stop
输入以下命令来获取证书:

./certbot-auto certonly –standalone –agree-tos -v -t –email xxx@mail.com -d 25230.com -d www.25230.com
-d 后面为需要获取证书的域名,申请完成后所有域名共用一个证书。

如果申请成功,会显示以下信息,可惜的是获取一次有效期只有90天,到期后需要续签:

IMPORTANT NOTES:
– Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/25230.com/fullchain.pem. Your cert
will expire on 2016-03-08. To obtain a new version of the
certificate in the future, simply run Let’s Encrypt again.
证书文件放在了/etc/letsencrypt/live下。

方案二)如果你不想关闭服务器,也可以指定webroot来获取证书:

–server: 指定 letsencrypt 服务器,-w: 指定网站根目录,-d: 指定网站域名。用 , 分开同一个网站绑定的所有域名

./certbot-auto certonly –webroot –agree-tos -v -t –email xxx@mail.com -w /home/wwwroot/25230.com -d 25230.com,www.25230.com
PS:如果你的域名使用的是国内的NS服务商,比如:hichina、dnspod、cloudxns,可能不能正常通过验证,见这条 Issue:DNS CAA query timeout

错误提示类似于:

connection :: The server could not connect to the client for DV :: DNS query timed out
解决方案是将域名的NS服务商换为国外的,例如namecheap、linode、cloudflare、google cloud DNS。
你可以先尝试是否能正常获取,如果不能的话,可以选择切换域名的NS服务器。我在操作的时候将域名的NS换到了https://www.cloudflare.com,但是换了NS需要等几个小时才能生效。

配置Nginx添加Https
listen 443 ssl;
server_name 25230.com;
index index.html index.htm index.php;
root /home/wwwroot/25230.com;

ssl_certificate /etc/letsencrypt/live/25230.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/25230.com/privkey.pem;
添加一个网站:

server {
listen 80;
server_name 25230.com www.25230.com;
return 301 https://$server_name$request_uri;
}
以上设置会将所有的 Http 请求通过301重定向到 Https。
更新证书的时候,letsencrypt 会通过 http 协议访问你网站目录下的一个文件,请求类似于:

66.133.109.36 – – [05/Jan/2016:20:11:24 -0500] “GET /.well-known/acme-challenge/HGr8U1IeTW4kY_Z6UIyaakzOkyQgPr_7ArlLgtZE8SX HTTP/1.1” 200 87 “-” “Mozilla/5.0 (compatible; Let’s Encrypt validation server; +https://www.letsencrypt.org)”

而通过上述设置,可以让服务器上的所有网站证书更新时使用同一个目录,而不用分别去配置每个网站的目录。
打开网站看看,已经加上绿色锁头了,可是如果网页上存在有没走Https的链接,就不能全绿。

Let’s Encrypt续签
新版续签只需要一条命令:

./certbot-auto renew -v

或者:
./certbot-auto renew –standalone –pre-hook “service nginx stop” –post-hook “service nginx start”

你可以选择添加一个计划任务,自动续签。
优化Https安全性
各服务器推荐配置可以参考:https://cipherli.st/

1.首先生成dhparam.pem:

cd /etc/ssl/certs
openssl dhparam -out dhparam.pem 2048
我用的是2048bit加密,当然如果你服务器配置够好,可以选4096bit。

2.生成HTTP Public Key Pinning 参考:Public Key Pinning

openssl rsa -in privkey.pem -outform der -pubout | openssl dgst -sha256 -binary | openssl enc -base64
writing RSA key
FankyFNJUnHYf737yBalLqkC8bWTxZGTCeoMezFgNX0=

openssl x509 -in chain.pem -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
writing RSA key
YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg=

在这里直接贴上我的配置:
listen 80;
listen 443 ssl http2;
server_name 25230.com www.25230.com;
index index.html index.htm index.php;
root /home/wwwroot/25230.com;

if ($scheme = http) {
return 301 https://$server_name$request_uri;
}

ssl_certificate /etc/letsencrypt/live/25230.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/25230.com/privkey.pem;

ssl_ciphers “ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4”;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/25230.com/chain.pem;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
server_tokens off;
resolver 8.8.4.4 8.8.8.8 valid=300s;
resolver_timeout 10s;

fastcgi_hide_header X-Powered-By;

add_header Strict-Transport-Security “max-age=63072000; includeSubDomains; preload”;
add_header Public-Key-Pins ‘pin-sha256=”FankyFNJUnHYf737yBalLqkC8bWTxZGTCeoMezFgNX0=”; pin-sha256=”YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg=”; max-age=2592000; includeSubDomains’;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
配置完之后可以测试一下现在的安全级别:https://www.ssllabs.com/ssltest/

HTTP Security Report:https://httpsecurityreport.com/

配置参考地址:

1.Configuring Let’s Encrypt for nginx with Automatic Renewal

2.Strong SSL Security on nginx

3.使用 Nginx 构建优化的 https 服务

将网站加入HSTS preload list
HSTS preload list是什么?
HSTS preload list是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用Chrome浏览器访问时,会自动转换成HTTPS。Firefox、Safari、Edge浏览器也会采用这个列表。

加入地址:https://hstspreload.appspot.com

加入条件:

有效的证书;
将所有HTTP流量重定向到HTTPS;
确保所有子域名启用HTTPS,特别是www子域名;
同时,HSTS响应头需要满足以下条件。

max-age至少需要18周,10886400秒;
必须指定includeSubdomains参数;
必须支持preload参数。
例如:

add_header Strict-Transport-Security “max-age=63072000; includeSubDomains; preload”

从申请到审核通过,时间在几天到几周不等。申请后,你可以在https://hstspreload.appspot.com网站中查询最新的状态, 也可以在Chrome浏览器的地址框中输入“chrome://net-internals/#hsts”查看。
从审核通过到正式加入到 Chrome 的 stable release 版本中还需要一段时间,因为要经过 canary、dev、beta 以及 stable。

这个文件就是 Chrome 的预加载列表文件:transport_security_state_static.json

相关文章:

  • 亚马逊卖家怎样优化ACoS
  • Day 30 -- Rails 实作 Action Cable 即时交易功能
  • 速卖通虚假发货不可取,这些惩罚告诉你
  • [DAY21] 非同步的 Boxenn Use Case
  • Day 22 - NFS 与档案权限
  • [Day29] 建立购物车系统 - 12
  • [Day 7] 阿嬷都看得懂的文字标签与语意化标签
  • LINE DEVELOPER DAY 2021 — 提升 LIFF 的开发体验
  • 跨境电商海外仓一件代发的流程是怎样的?
  • 手动广告投放技巧
  • [Day1] 30天大纲
  • [Day 11] 条件渲染v-if、v-show
  • 23 - Prettier - 格式化程序码工具
  • 亚马逊卖家如何做到突破瓶颈?
  • [Day15]-类别2
  • 最好用的云服务器推荐:什么云服务器稳定好用又便宜
  • WordPress 调试模式基本指南
  • VPS评测:Netcloud/香港/原生IP/不限流量/月付60港币起
  • WordPress禁用古腾堡编辑器全屏模式
  • 阿里云需要实名认证吗?阿里云个人可以做企业认证吗
  • 香港电话卡怎么在内地使用: CSL Hello/Three/CMHK/Smartone电话卡内地使用方法
  • PayPal国外买东西教程:银联卡(国内储蓄卡信用卡)怎么用PayPal买国外的东西更安全
  • 最新虚拟信用卡无限开卡渠道大全
  • 如何在Hositnger主机开启Cloudflare服务,Hositnger主机Cloudflare CDN使用教程
  • 免费用谷歌云的方法:最新谷歌云300美金免费用的申请教程和方法
  • Linux运维命令大全:Linux运维要掌握哪些命令
  • WordPress 5.7 引入函数来检查文章是否可以公开查看
  • WordPress SEO怎么做?如何优化WordPress提升流量
  • 国外虚拟主机大全:便宜好用靠谱的国外网站空间推荐大全
  • Facebook和instagram推广营销教程