https 免费证书配置
Posted SwiftClub
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了https 免费证书配置相关的知识,希望对你有一定的参考价值。
- nginx
Why?
为什么要搭建 https 服务
最近有计划写一个小程序, 发现有硬性条件,请求需要 https, 图片除外。 在我的记忆中,https 需要配置证书,并且基本上都是收费的,且价格昂贵。 以前阿里云是支持免费的 https 配置,现在也收费了。奈何资本只想体验下 程序开发,不想拖入太贵的成本。有没有免费搭建的呢?
What?
Let's Encrypt?
Let's Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书。
Let's Encrypt由互联网安全研究小组(英语:Internet Security Research Group)(缩写ISRG)提供服务。主要赞助商包括电子前哨基金会、Mozilla基金会、Akamai以及思科。2015年4月9日,ISRG与Linux基金会宣布合作。
摘自 维基百科
Let's Encrypt
的真正意义在于加密流量。 Let's Encrypt
的最大的意义就是推动基础DV HTTPS证书的普及,换句话说就是,推动HTTPS的普及。 Let's Encrypt
的最大贡献是它的 ACME
协议,第一份全自动服务器身份验证协议,以及配套的基础设施和客户端。 废话不多说,怎么做?
ACME 协议?
自动证书管理环境 (Automated Certificate Management Environment)
Let's Encrypt
服务所签发的证书为域名认证证书(DV,Domain-validated Certificate)签发这类证书需要域名所有者完成以下一种
Challenge
以证明自己对域名的所有权:
验证申请人对域名的
Whois
信息中邮箱的控制权;验证申请人对域名的常见管理员邮箱(如以 admin@、postmaster@ 开头的邮箱等)的控制权;
在
DNS
的TXT
记录中发布一条CA
提供的字符串;在包含域名的网址中特定路径发布一条
CA
提供的字符串。不难发现,其中最容易实现自动化的一种操作必然为最后一条,ACME 协议中的
SimpleHTTP
认证即是用一种类似的方法对从未签发过任何证书的域名进行认证。该协议要求在访问http://域名/.well-known/acme-challenge/指定字符串
时返回特定的字符串。
摘自 SSL/TLS 加密新纪元 - Let's Encrypt
How?
工具
acme.sh
安装 acme.sh
生成证书
copy 证书到 nginx/apache 或者其他服务
更新证书
更新 acme.sh
具体步骤 这里
提示
获取 accesskeys
控制台 -> 账号 -> accesskeys 获取.
export Ali_Key="ks****ey"
export Ali_Secret="qmMDAqzPJ******Xb1"
开启
443
端口的访问权限控制台 --> 云服务器 ESC ---> 网络和安全 ---> 安全组
nginx 配置
cd /etc/nginx/sites-available
vim default
## http www.xxx.com
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name www.xxx.com;
try_files $uri @proxy;
location @proxy {
proxy_pass http://127.0.0.1:8980;
proxy_pass_header Server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header Server;
proxy_connect_timeout 3s;
proxy_read_timeout 10s;
}
}
### http site.xxx.com
server {
listen 80;
server_name site.xxx.com; # 更改
charset utf-8;
root /var/www/site/dist/;
index index.html;
location / {
try_files $uri $uri/ @rewrites;
}
location @rewrites {
rewrite ^(.+)$ /index.html last;
}
}
# http api.xxx.com, 需要给子域名添加解析
server {
listen 80;
server_name api.xxx.com; # 更改
return 301 https://$server_name$request_uri; # 重写
}
# https api.xxx.com
server {
listen 443 ssl;
server_name api.xxx.com; # 更改
ssl on;
ssl_certificate ssl/fullchain.cer;
ssl_certificate_key ssl/api.twicebook.top.key;
try_files $uri @proxy;
location @proxy {
proxy_pass http://127.0.0.1:8980;
proxy_pass_header Server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header Server;
proxy_connect_timeout 3s;
proxy_read_timeout 10s;
}
}
总结
总体来说 https 的配置流程还是比较简单的, 但是还是有很多细节,所以总体配下来到可以正确访问到 https api, 花了一下午时间。 运维的工作需要的是耐心和细致。希望经过这次配置,自己以后可以非常 容易的完成这项配置。
以上是关于https 免费证书配置的主要内容,如果未能解决你的问题,请参考以下文章