博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CentOS Nginx 安装Let’s Encrypt 免费ssl证书
阅读量:4132 次
发布时间:2019-05-25

本文共 3341 字,大约阅读时间需要 11 分钟。

CentOS Nginx 安装Let’s Encrypt 免费ssl证书

Let’s Encrypt

随着现在启用SSL证书的网站越来越多,装逼的光环已经黯淡了很多。但是现在运营商劫持越来越厉害了,我个人的域名,同样的配置,没启用SSL证书的经常无法访问。一些博友的网站我也经常无法访问,主要是广东电信太坑爹了,启用https可以避免这个问题。

Let’s Encrypt 这个免费、自动化、开放的证书签发服务。虽然是免费证书,但是十分给力。我也参考了ququ的文章实际体验了一下,虽然最后成功了,但申请过程中还是踩了不少坑,本文在详细介绍下安装方法以及可能遇到的错误。我的其他域名 都申请了该证书。

虚拟主机上我没研究能否安装,但是自动续签这个应该只能在VPS上进行。其实阿里云非常便宜,选择青岛机房的最低配,一年282,再使用我的9折码AMTU1Y,一年254,流量费可以忽略不计。图片存储选择又拍云,每天1分钱,偶尔出现个故障会返你1元代金券,基本啥上也算是完全免费了。这个价位应该比一些虚拟主机还便宜,至于选择就看你自己了。

我的服务器环境为Centos 6.5 军哥lnmp 一键安装包。没有使用Let’s Encrypt 官网提供的工具来申请证书,而是用了acme-tiny 这个更为小巧的开源工具。

创建帐号和 CSR 文件

如果多个域名请注意修改相应前缀区分,避免造成证书混乱。

首先ssh登录你的服务器

mkdir ssl/cd sslopenssl genrsa 4096 > galfond_account.keyopenssl genrsa 4096 > galfond_domain.keyopenssl req -new -sha256 -key galfond_domain.key -subj "/" -reqexts SAN -config <(cat /usr/local/openssl/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:galfond.com")) > galfond_domain.csr

执行这一步时,可能会提示找不到 /etc/ssl/openssl.cnf 文件,其实是openssl配置文件的位置不对,修改下位置即可,可用下面的命令查找文件位置find / -name "openssl.cnf",找到后替换即可。

配置验证服务

我们知道,CA 在签发 DV(Domain Validation)证书时,需要验证域名所有权。传统 CA 的验证方式一般是往 admin@yoursite.com 发验证邮件,而 Let’s Encrypt 是在你的服务器上生成一个随机验证文件,再通过创建 CSR 时指定的域名访问,如果可以访问则表明你对这个域名有控制权。

首先创建用于存放验证文件的目录,例如:

mkdir /home/wwwroot/challenges/

然后修改你的Nginx 域名配置文件并重新载入服务

server {    server_name www.yoursite.com yoursite.com;    location ^~ /.well-known/acme-challenge/ {        alias /home/wwwroot/challenges/;        try_files $uri =404;    }    location / {        rewrite ^/(.*)$ https://yoursite.com/$1 permanent;    }}

获取网站证书

下载脚本并执行

wget https://raw.githubusercontent.com/diafygi/acme-tiny/master/acme_tiny.pypython acme_tiny.py --account-key ./galfond_account.key --csr ./galfond_domain.csr --acme-dir /home/wwwroot/challenges/ > ./galfond_signed.crt

如果你的Python 版本为2.6可能会出现argparse没安装的错误,需要安装一下。

wget https://pypi.python.org/packages/source/a/argparse/argparse-1.4.0.tar.gz#md5=08062d2ceb6596fcbc5a7e725b53746ftar -xzvf argparse-1.4.0.tar.gzcd argparsepython setup.py installeasy_install argparsepip install argparse

再重新执行命令即可,如果出现以下错误,那应该是Nginx 配置问题,确定目录是否正确,域名是否正确绑定等。

ValueError: Wrote file to /home/xxx/www/challenges/oJbvpIhkwkBGBAQUklWJXyC8VbWAdQqlgpwUJkgC1Vg, but couldn't download http://www.yoursite.com/.well-known/acme-challenge/oJbvpIhkwkBGBAQUklWJXyC8VbWAdQqlgpwUJkgC1Vg

搞定网站证书后,还要下载 Let’s Encrypt 的中间证书。在 Nginx 配置中,需要把中间证书和网站证书合在一起:

wget -O - https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem > intermediate.pemcat galfond_signed.crt intermediate.pem > galfond_chained.pem

中间证书都是一样的,多个域名无需重复下载。

最终,修改 Nginx 中有关证书的配置并 reload 服务即可:

ssl_certificate /root/ssl/galfond_chained.pem;ssl_certificate_key /root/ssl/galfond_domain.key;

详细配置可以参考我以前写的文章

1 likes , 17.53k reads.

配置 crontab 及自动更新

如果没有安装crontab 则需要先安装一下

yum install -y vixie-cron

确认是否安装成功:

crontab -l

启动

service crond start

新建renew.sh

#!/bin/bashcd /root/ssl/python acme_tiny.py --account-key galfond_account.key --csr galfond_domain.csr --acme-dir /home/wwwroot/challenges/ > galfond_signed.crt || exitwget -O - https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem > intermediate.pemcat galfond_signed.crt intermediate.pem > galfond_chained.pemservice nginx reload

保存后执行

chmod a+x renew.sh

增加脚本执行权限,然后再执行

crontab -e

添加

0 0 1 * * /root/renew.sh >/dev/null 2>&1

注:需在root帐号下执行,注意脚本位置。

总体来说Let’s Encrypt 相当不错,我给我的好几个域名都申请了该证书,应该没有任何问题了,有问题欢迎留言和我交流。

转载地址:http://bebvi.baihongyu.com/

你可能感兴趣的文章
postgresql监控工具pgstatspack的安装及使用
查看>>
【JAVA数据结构】双向链表
查看>>
【JAVA数据结构】先进先出队列
查看>>
Objective-C 基础入门(一)
查看>>
Flutter Boost的router管理
查看>>
iOS开发支付集成之微信支付
查看>>
C++模板
查看>>
【C#】如何实现一个迭代器
查看>>
【C#】利用Conditional属性完成编译忽略
查看>>
VUe+webpack构建单页router应用(一)
查看>>
(python版)《剑指Offer》JZ01:二维数组中的查找
查看>>
Spring MVC中使用Thymeleaf模板引擎
查看>>
PHP 7 的五大新特性
查看>>
深入了解php底层机制
查看>>
PHP中的stdClass 【转】
查看>>
XHProf-php轻量级的性能分析工具
查看>>
OpenCV gpu模块样例注释:video_reader.cpp
查看>>
就在昨天,全球 42 亿 IPv4 地址宣告耗尽!
查看>>
Mysql复制表以及复制数据库
查看>>
Linux分区方案
查看>>