zoukankan      html  css  js  c++  java
  • nginx申请并配置免费https

      你还在让你的网站裸奔在网络上吗?在这里我们将搭建免费版HTTPS,免费的,免费的,免费的,重要的事情说三遍,申请来源为letsencrypt,

      超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,如果攻击者截取了客户端与服务器之间的传输报文,将能直接获取到其中信息,

      为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,

      HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为客户端和服务器之间的通信加密。

    阅读目录

    1. 下载certbot
    2. 查看certbot
    3. 申请https证书(证书有效期3个月,过期需要重新申请)
      1. 方式一:使用DNS方式验证,该方式需要你能配置域名,我个人喜欢这种方式
      2. 方式二:使用插件方式
    4. 配置nginx支持https
    5. 使用shell脚本与定时任务定时续期证书
      1. 方式一的续期
      2. 方式二的续期

    1、下载certbot

       这里使用git下载,还没有安装git的 查看如何安装

      

      切换目录

       cd /usr/local 

      克隆git仓库

       git clone https://github.com/certbot/certbot.git 

      克隆完成将会在/usr/loca/  出现certbot目录

    2、查看certbot

      切换到certbot目录

       cd /usr/local/certbot 

      如果目录是这样的说明安装成功了

      

      certbot常用命令 查看官方文档

    3、申请https证书(证书有效期3个月,过期需要重新申请)

       查看当前证书,第一次执行将会安装一些依赖,中途有一次确认询问,输入Y即可

       ./certbot-auto certificates

      3.1 方式一:使用DNS方式验证,该方式需要你能配置域名,我个人喜欢这种方式

             ./certbot-auto --server https://acme-v02.api.letsencrypt.org/directory -d  你的域名 --manual --preferred-challenges dns-01 certonly  如:

           配置泛域名

           ./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用到的证书了

      3.2 方式二:使用插件方式

          

          我们先看看官方怎么说的

          

          这里我使用的是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端口,则会在如下位置添加信息

          

          其他方式请自行摸索

    4、配置nginx支持https

      查看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访问。
     

    5、使用shell脚本与定时任务定时续期证书

       注意:为避免遇到操作次数的限制,加入 --dry-run 参数,可以避免操作限制,等执行无误后,再去掉进行真实的renew 操作。

      

        5.1 方式一的续期

          其中域名为/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

        5.2 方式二的续期

          如下:

             ./certbot-auto certonly --renew-by-default --nginx -d api2.nl166.com --dry-run 

          

          增加系统定时任务操作参考方式一

        

            

     

    写的文章仅供自己参考,仅供自己参考,仅供自己参考,免得太久没有使用忘记了。
  • 相关阅读:
    AOJ 2200 Mr. Rito Post Office
    poj 3259 Wormholes
    01背包求解组合最值问题
    01背包求解面值组成问题
    金明的预算方案
    追赶法
    有关动态规划的一些定理。。。。。
    4980
    并查集
    快速幂
  • 原文地址:https://www.cnblogs.com/chennl/p/10177353.html
Copyright © 2011-2022 走看看