为网站申请免费SSL证书 开启HTTPS

不想使用宝塔建站,因为使用宝塔得绑定手机,又因为没钱开高级服务器,使用宝塔怕会增加服务器负担,所以使用lnmp来搭建环境,但看了看lnmp的证书申请教程太麻烦,还得用得dns服务商,偶然在逛github时看到有个域名申请脚本:ACME.sh,因为之前没玩网站,也就随手点了一下星,收藏起来,以方便以后用到能找到,现在玩博客了,想到了它并使用它申请了免费证书。

安装acme.sh

安装很简单, 一个命令:

				
					curl https://get.acme.sh | sh -s email=my@example.com
				
			

acme.sh会安装到你的根目录下。
也就是说如果你是root用户,他会在`/root`文件夹下创建一个.acme.sh文件夹,并将所有生成的文件连同证书密钥一同放进这个文件夹。
如果是其他用户,比如abc,就会在用户的根目录/abc下生成.acme.sh文件夹。
自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书。
安装过程不会污染已有的系统任何功能和文件, 所有的修改都限制在安装目录中: ~/.acme.sh/。
更高级的安装选项请参考官方文档

安装失败
因为默认命令是使用github服务,国内网络可能会下载失败。

打开参考,会使用国内的gitee服务进行安装,分别执行以下命令使用国内服务。

				
					git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m my@example.com
				
			

使用国内服务安装成功。

生成证书

官方教程有两种方式,一种是http方式,一种是dns方式。

HTTP

http 方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了。但是这种好像只能为单个域生成证书,不能为泛域名生成证书。
在acme.sh目录下执行以下命令生成证书。

				
					./acme.sh --issue -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/
				
			

证书申请完成。

acme.sh在完成验证之后, 会恢复到之前的状态, 都不会私自更改你本身的配置. 好处是你不用担心配置被搞坏, 也有一个缺点, 你需要自己配置 ssl 的配置, 否则只能成功生成证书, 你的网站还是无法访问https. 但是为了安全, 你还是自己手动改配置吧。高级用法参考官方文档

DNS

DNS有手动和自动DNS两种,手动DNS不能自动更新证书,这里就不写了,详细参考官方文档,推荐第二种DNS API方式。
我的域名是在腾讯注册的,这里以腾讯作为演示。
首先在腾讯DNSPOD创建密钥,注意一下,Token只在创建时完整显示,创建之后便会隐藏几位字符,所以需要在创建时保存下来,否则只能重新创建一个。

在ssh下分别输入以下命令设置ID和KEY。

				
					export DP_Id="<id>"
export DP_Key="<key>"
				
			

进入.acme.sh目录。

				
					cd .acme.sh
				
			

然后执行命令申请证书。

				
					./acme.sh --issue --dns dns_dp -d abc.com -d *.abc.com
				
			

这条命令将会为abc.com和xxx.abc.com申请证书。也就是说不管是abc.com或者reg.abc.com再或者file.abc.com都将获得证书。
其它域名商参考官方文档
可在看到已经生成的证书和key。

安装证书

前面证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方.
注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/。不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.
正确的使用方法是使用 –install-cert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置。

Apache
				
					acme.sh --install-cert -d example.com \
--cert-file      /path/to/certfile/in/apache/cert.pem  \
--key-file       /path/to/keyfile/in/apache/key.pem  \
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
--reloadcmd     "service apache2 force-reload"
				
			
Nginx

官方给出的nginx配置是*.pem文件,但是我在实际使用中nginx会报错,所以我是使用的domain.key和fullchain.cert文件。详细参考官方文档
这条命令的意思是把证书文件安装到指定位置/usr/local/nginx/conf/ssl/。注意将命令的域名和路径替换成你自己的。

				
					acme.sh --install-cert -d wort.cloud \
--key-file       /usr/local/nginx/conf/ssl/wort.cloud.key \
--fullchain-file /usr/local/nginx/conf/ssl/fullchain.cer \
--reloadcmd     "service nginx force-reload"
				
			

将证书安装到指定位置后,然后修改你的nginx配置文件来引用证书。

0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论!x