你还在让你的网站裸奔在网络上吗?在这里咱们将搭建免费版HTTPS,免费的,免费的,免费的,重要的事情说三遍,申请来源为letsencrypt,php
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,若是攻击者截取了客户端与服务器之间的传输报文,将能直接获取到其中信息,css
为了解决HTTP协议的这一缺陷,须要使用另外一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,html
HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为客户端和服务器之间的通讯加密。nginx
这里使用git下载,尚未安装git的 查看如何安装git
切换目录github
cd /usr/local web
克隆git仓库shell
git clone https://github.com/certbot/certbot.git api
克隆完成将会在/usr/loca/ 出现certbot目录浏览器
切换到certbot目录
cd /usr/local/certbot
若是目录是这样的说明安装成功了
certbot经常使用命令 查看官方文档
查看当前证书,第一次执行将会安装一些依赖,中途有一次确认询问,输入Y便可
./certbot-auto certificates
配置泛域名
./certbot-auto --server https://acme-v02.api.letsencrypt.org/directory -d *.nl166.com --manual --preferred-challenges dns-01 certonly
配置制定域名
./certbot-auto --server https://acme-v02.api.letsencrypt.org/directory -d api.nl166.com --manual --preferred-challenges dns-01 certonly
配置二级泛域名
./certbot-auto --server https://acme-v02.api.letsencrypt.org/directory -d *.api.nl166.com --manual --preferred-challenges dns-01 certonly
如上图所示,第一次会让你输入一个邮箱,按要求输入就能够了,到时候会发送一个邮件给你,须要点击确认邮箱,因此务必填写真实邮箱,而后按要求确认就可,不确认是执行不下去的。
接下来会让你验证域名,按要求解析个TXT类型的记录
保存确认之后再回到服务器中确认
上面这两个文件就是配置https用到的证书了
咱们先看看官方怎么说的
这里我使用的是nginx(申请完会自动帮你重启nginx)这种方式配置不了泛域名,只能一个一个添加
./certbot-auto --nginx -d api2.nl166.com
解决上述报错,请注意,/usr/local/nginx 请替换为你的nginx实际安装位置 安装LNMP
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
ln -s /usr/local/nginx/conf/ /etc/nginx
再次执行申请
中途会询问你请选择是否将HTTP流量重定向到HTTPS,删除HTTP访问。可根据本身的需求选择,我这里是c取消选择(实际上这一步能够直接不理,经测试,这一步没有选择前,访问网址https已经能够访问了。)
若是想省略询问这一步,能够添加certonly 该种方式只会生成证书,不作其他操做,证书配置须要本身手动添加 以下:
./certbot-auto certonly --nginx -d api2.nl166.com
如上图所示,若是你配置了监听443端口的server,他会帮你自动找到对应域名的配置文件,并添加下面两行,还把我格式打乱了,}号与上面{的缩进不对应了,不过不影响功能,这里不知道会不会根据nginx的版本选择是否添加ssl on;
由于我这个nginx版本是不须要这个的,较低版本须要添加ssl on;才能开启https访问。
如没有监听该域名的443端口,则会在以下位置添加信息
查看nginx是否支持配置https
/usr/local/nginx/sbin/nginx -V
若是尚未--with-http_ssl_module模块则须要添加模块 查看如何给nginx升级或增长模块
1 # HTTPS server 2 # 3 server { 4 listen 443 ssl; 5 server_name api2.nl166.com; 6 root /data/web/im.nl166.com; 7 8 location / { 9 index index.php; 10 } 11 12 #auth_basic "hello world"; 13 #auth_basic_user_file /usr/local/nginx/conf/auth/nl166.auth; 14 15 location ~ \.php$ { 16 include fastcgi_params; 17 fastcgi_pass unix:/tmp/php-fcgi.sock; 18 fastcgi_index index.php; 19 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 20 } 21 location ~ .*.(svn|git|cvs) { 22 deny all; 23 } 24 25 ssl_certificate /etc/letsencrypt/live/api2.nl166.com/fullchain.pem; # managed by Certbot 26 ssl_certificate_key /etc/letsencrypt/live/api2.nl166.com/privkey.pem; # managed by Certbot 27 }
nginx配置https很简单,只须要复制上面代码到监听80端口的server同级。
ssl_certificate 跟 ssl_certificate 分别对应本身的证书文件,其余配置跟普通http的配置同样修改成本身对应信息。
较低版本须要增长ssl on;才能开启https访问。
其中域名为/etc/letsencrypt/renewal/目录下的****.conf ,****就是你要填写的域名,好比我生成的时候是*.nl166.com,可是在实际生成的时候是没有*号的
home/certbot-sh/au.sh 替换成你本身更新DNS的脚本
以下:
./certbot-auto renew --cert-name nl166.com --manual-auth-hook /data/shell/crontab/auto_update_httpscert.sh --dry-run
把更新命令放到一个文件,我这里是放在了/data/shell/crontab/auto_update_httpscert.sh 内容以下 ,原来的auto_update_httpscert.sh 更改到/data/shell/cnl_update_httpscert.sh
增长系统定时任务
crontab -e
#每一个星期天凌晨5点执行更新https证书操做
0 5 * * 0 sh /data/shell/crontab/auto_update_httpscert.sh
以下:
./certbot-auto certonly --renew-by-default --nginx -d api2.nl166.com --dry-run
增长系统定时任务操做参考方式一