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 

          

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

        

            

     

    写的文章仅供自己参考,仅供自己参考,仅供自己参考,免得太久没有使用忘记了。
  • 相关阅读:
    JDBC 查询的三大参数 setFetchSize prepareStatement(String sql, int resultSetType, int resultSetConcur)
    有空必看
    SpringMVC 利用AbstractRoutingDataSource实现动态数据源切换
    FusionCharts JavaScript API Column 3D Chart
    FusionCharts JavaScript API
    FusionCharts JavaScript API
    Extjs 继承Ext.Component自定义组件
    eclipse 彻底修改复制后的项目名称
    spring 转换器和格式化
    Eclipse快速生成一个JavaBean类的方法
  • 原文地址:https://www.cnblogs.com/chennl/p/10177353.html
Copyright © 2011-2022 走看看