前言
SSL(Secure Sockets Layer 安全套接字协议)
TLS(Transport Layer Security 传输层安全)
SSL及其继任者TLS是为网络通信提供安全及数据完整性的一种安全协议。
现在全民https,使用http会被浏览器提示不安全……这就很尴尬了。
SSL免费证书其实还是很多的,不过需要注意到期时间,配置起来也比较麻烦,不适合新手。
本篇介绍一种超简单的设置方法,纯免费,虽然3个月有效期,但是 自动续期≈长期有效!
环境
域名: godaddy (godaddy.com)
VPS: BandwagonHOST (bwh8.net)
环境: LNMP一键安装包v1.5 (lnmp.org)
Blog: typecho (typecho.org)
SSL: Let'sEncrypt (letsencrypt.org)
注意:域名、vps并不影响本教程,可以随意选择,blog程序原则上也适用于其他的php程序,但因为本教程使用的是lnmp整合包中的脚本,所以需要环境为lnmp一键安装包。
开整
前提:安装好lnmp-v1.5一键安装包
,并配置好网站,使之可以正常http访问。
获取API
参照下表,获取域名所在供应商的API信息
服务商 | 缩写 | 所需API参数 | 申请API地址 |
---|---|---|---|
aliyun | ali | export Ali_Key="123456" export Ali_Secret="abcdef" | 点击访问 |
aws | aws | export AWS_ACCESS_KEY_ID=123456 export AWS_SECRET_ACCESS_KEY=abcdef | 点击访问 |
cloudflare | cf | export CF_Key="123456" export CF_Email="abc@example.com" | 点击访问 |
dnspod (cn大陆版) | dp | export DP_Id="123456" export DP_Key="abcdef" | 点击访问 |
godaddy | gd | export GD_Key="123456" export GD_Secret="abcdef" | 点击访问 |
linode | linode | export LINODE_API_KEY="123456" | 点击访问 |
namecom | namecom | export Namecom_Username="username" export Namecom_Token="123456" | 点击访问 |
namesilo | namesilo | export Namesilo_Key="123456" | 点击访问 |
本文只列举了比较常用的几家,更多服务商信息及更详细设置方法详见:
https://github.com/acmesh-official/acme.sh/wiki/dnsapi
比如,我的域名在狗爹家,所以登录godaddy的地址申请API
按照刚才表格要求将所需API参数替换并记录下来
然后使用表格中的命令将参数导入到服务器中
[root@KsC7 ~]# export GD_Key="AQKojY7xevk_5wNz2Hq5TxhQcuD2DWn6Uw"
[root@KsC7 ~]# export GD_Secret="JH1FJ8wqG4ZraSYdvGSNPQ"
上面代码不要直接复制我的!需要自己申请自己的!并按表格中域名供应商要求规范导入!
上面代码不要直接复制我的!需要自己申请自己的!并按表格中域名供应商要求规范导入!
运行脚本
1. 登录vps,输入lnmp dnsssl gd
PS: 其中gd
为域名DNS服务商godaddy的简称,根据情况替换成自己的,常见其他服务商参见上面表格
2. 填入相应信息
等待提示"Let's Encrypt SSL Certificate create successfully." 表示成功,绿色字很醒目。
3. 使用https://www.example.com
尝试访问你的网站,可以访问即说明配置正确
其实到这里已经成功了,如果想仅使用https访问还需要做以下设置
设置80跳转443
1. 进入 typecho 后台->设置->基本->站点地址,改为https开头
2. 登录vps,修改nginx配置文件
PS: lnmp包中的nginx配置文件为/usr/local/nginx/conf/vhost/www.example.com.conf
找到包含listen 80;
字段的server
标签,server_name
下面加入一行重写规则:
rewrite ^(.*) https://www.gaoqichen.com$1 permanent;
该规则意思是所有访问80端口(http协议)的请求都会跳转到https协议(443端口)上。
3. vps命令行输入命令nginx -t
,检查配置文件语法
输入结果为下面内容时说明配置文件语法没有问题:
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
4. vps命令行输入命令nginx -s reload
,优雅重启nginx服务
其他
1. 自动续期是如何实现的?
查看定时任务发现,定时运行acme的脚本而已。
[root@KsC7 ~]# crontab -l
# add by lnmp
16 0 * * * "/usr/local/acme.sh"/acme.sh --cron --home "/usr/local/acme.sh" > /dev/null 2>&1
其实申请和续签证书都是基于acme脚本实现的,在非lnmp环境中也是可以通过使用acme来实现的。
2. 如果需要手动更新证书,可以直接使用命令:
acme.sh --issue -d www.yourdomain.com --nginx
3. 关于“绿锁”
所谓“绿锁”就是浏览器地址栏,在https前面显示的一个图标,表示该页面及其所有连接都在使用https安全协议链接。所以如果通过设置可以https访问页面,但是仍然提示不安全的话,请检查是否有部分连接或图片或CDN使用的是http协议饮引用的。
使用Chrome内核浏览器,按F12,在安全选项卡里也可以看到自己的证书。嗯简单说就是这样了。
Enjoy it!
参考资料:
https://lnmp.org/faq/letsencrypt-wildcard-ssl.html
https://github.com/Neilpang/acme.sh
Starting create SSL Certificate use Let's Encrypt...
[Thu Feb 20 20:12:23 CST 2020] Multi domain='DNS:to001.xyz,DNS:www.to001.xyz'
[Thu Feb 20 20:12:23 CST 2020] Getting domain auth token for each domain
[Thu Feb 20 20:12:26 CST 2020] Getting webroot for domain='to001.xyz'
[Thu Feb 20 20:12:27 CST 2020] Getting webroot for domain='www.to001.xyz'
[Thu Feb 20 20:12:27 CST 2020] Adding txt value: nBSkGDz_zM0ggAX2Yv_JUXsW3GOwvvaA8NEu1MA2WRo for domain: _acme-challenge.to001.xyz
[Thu Feb 20 20:12:27 CST 2020] API token for namesilo.com is missing.
[Thu Feb 20 20:12:27 CST 2020] Please specify that in your environment variable.
[Thu Feb 20 20:12:27 CST 2020] Error add txt for domain:_acme-challenge.to001.xyz
[Thu Feb 20 20:12:27 CST 2020] Please check log file for more details: /usr/local/acme.sh/acme.sh.log
Let's Encrypt SSL Certificate create failed!
创建失败 怎么办求解救
API token for namesilo.com is missing.
没有创建API啊亲
我提示创建证书失败怎么办
是不是没有设置获取运行商的api啊
这个还可以