zoukankan      html  css  js  c++  java
  • Let's Encryt免费SSL证书申请[我司方案]

    Let's Encrypt颁发的证书是目前生产的大多数浏览器都信任的,您只需下载并运行Let's Encrypt客户端来生成一个证书即可。

    在颁发证书之前,需要验证您的域名的所有权。首先,在您的主机上运行的Let's Encrypt客户端将创建一个临时文件,其中包含所需的信息。Let's Encrypt验证服务器发出HTTP请求来检索文件并验证令牌,该令牌用于验证您的域名的DNS记录是否解析为运行Let's Encrypt客户端的服务器。

    下文介绍了配置NGINX Plus,获取证书以及设置证书自动续订的步骤。

    下载并安装Certbot

    您需要做的第一件事是下载并安装Let's Encrypt客户端certbot:

    # yum update
    # yum install -y git
    # git clone https://github.com/certbot/certbot /opt/letsencrypt

    注意:所有必需的依赖关系都随同安装certbot,包括Augeas,gcc,Python和完整的CA证书。请确认这符合您的安全策略。已安装的依赖关系的确切列表位于certbot 源代码中。

    创建加密临时文件模板

    Let's Encrypt客户端会在webroot-path /.well-known/acme-challenge/中创建一个临时文件,其中包含让我们的加密服务器使用的令牌,以验证您是否拥有您试图获得免费SSL证书的域。本文的webroot-path是 /var/www/letsencrypt

    我们首先使用GitHubGist创建一个带有让我们加密的证书的模板文件。如果没有模板,我们必须在Let's Encrypt命令行中指定值。

    1. 创建Let's Encrypt存储临时文件的目录,并设置所需的权限:

    # cd /var/www
    # mkdir letsencryp
    # chgrp www-data letsencrypt

    2. 创建 /etc/letsencrypt/configs/my-domain.conf文件,其中my-domain是完全域名(如www.example.com)。复制Gist内容,并在domains和email字段中设置适当的值。

    # the domain we want to get the cert for;
    # technically it's possible to have multiple of this lines, but it only worked
    # with one domain for me, another one only got one cert, so I would recommend
    # separate config files per domain.
    domains = my-domain
    # increase key size rsa-key-size = 2048 # Or 4096
    # the current closed beta (as of 2015-Nov-07) is using this server server = https://acme-v01.api.letsencrypt.org/directory
    # this address will receive renewal reminders email = my-email
    # turn off the ncurses UI, we want this to be run as a cronjob text = True
    # authenticate by placing a file in the webroot (under .well-known/acme-challenge/)
    # and then letting LE fetch it authenticator = webroot webroot-path = /var/www/letsencrypt/

    允许加密访问临时文件

    现在我们修改NGINX Plus配置,让Let's Encrypt来访问临时文件。

    将此location块添加到HTTP通信的虚拟服务器:

    server {
      listen 80 default_server;
      server_name my-domain;
      location /.well-known/acme-challenge {
      root /var/www/letsencrypt;
    }
    # ...
    }

    验证配置文件在语法上是否有效并重新启动NGINX:

    # nginx -t && nginx -s reload

    请求证书

    现在,一切都设置好了,我们要求证书。突出显示的消息确认我们已成功获取NGINX的证书和关联文件,Let's Encrypt存储在/etc/ letsencrypt/live/my-domain中。证书文件是 fullchain.pem和privkey.pem。

    # cd /opt/letsencrypt
    # ./certbot-auto --config /etc/letsencrypt/configs/my-domain.conf certonly
    Updating letsencrypt and virtual environment dependencies......
    Requesting root privileges to run with virtualenv: /root/.local/share/letsencrypt/bin/letsencrypt --config /etc/letsencrypt/configs/my-domain.conf certonly
    IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/my-domain/fullchain.pem. Your cert will expire on date. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. ...

    指向NGINX Plus的证书

    将证书和密钥添加到serverHTTP通信的块中:

    server {
    listen 443 ssl default_server;
    server_name my-domain;
      ssl_certificate /etc/letsencrypt/live/my-domain/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/my-domain/privkey.pem;
      # ... }

    验证配置文件在语法上是否有效,然后重新启动NGINX Plus加载新证书:

    # nginx -t && sudo nginx -s reload

    自动更新加密证书

    加密证书只有90天有效,之后需要更新。这个过程可以很容易地使用cron工作自动化。

    创建一个如下所示的简单脚本来更新证书,并在成功时重新启动NGINX Plus。将其另存为renew-letsencrypt.sh并保存在cron有权限的目录中。

    #!/bin/sh
    
    cd /opt/letsencrypt/ ./certbot-auto --config /etc/letsencrypt/configs/my-domain.conf certonly
    if [ $? -ne 0 ] then ERRORLOG=`tail /var/log/letsencrypt/letsencrypt.log` echo -e "The Let's Encrypt cert has not been renewed! 
     
    "  $ERRORLOG 
    else nginx -s reload fi exit 0

    创建/ var / log / letsencrypt /如果不存在。

    运行crontab -e并输入此字符串每两个月运行脚本:

    0 0 1 JAN,MAR,MAY,JUL,SEP,NOV * /path/to/renew-letsencrypt.sh

    至此,申请证书完毕~

    假定用户需要配置网站 https://example.com 。开发者希望用户在浏览器中输入网址时,直接键入www.example.com 即可通过 HTTPS 协议安全访问。此时用户输入的 www.example.com 请求转发流程如下:

    1、该请求以 HTTP 协议传输,通过 VIP 访问负载均衡监听器的 80 端口,并被转发到后端云服务器的 8080 端口。

    2、通过在腾讯云后端服务器的 nginx 上配置 rewrite 操作,该请求经过 8080 端口,并被重写到 https://example.com 页面。

    3、此时浏览器再次发送 https://example.com 请求到相应的 HTTPS 站点,该请求通过 VIP 访问负载均衡监听器的 443 端口,并被转发到后端云服务器的 80 端口。

    至此,请求转发完成。 该操作在浏览器用户未感知的情况下,将用户的 HTTP 请求重写为更加安全的 HTTPS 请求。

    为实现以上请求转发操作,用户可以对后端服务器做如下配置:

    server{
      listen 80;
      server_name example.qcloud.com;
      location / { #! customized_conf_begin; client_max_body_size 200m; rewrite ^/.(.*) https://$host/$1 redirect; }
    }

    或者在nginx新版本中,采用推荐的301重定向配置方法,将nginx http页面重定向到https页面:

    server {
      listen 80;
      server_name example.qcloud.com;
      return 301 https://$server_name$request_uri;
    }
    
    server {
      listen 443 ssl;
      server_name example.qcloud.com;
      [....]
    }
  • 相关阅读:
    使用SpringAOP
    Alpha 冲刺 (5/10)
    Alpha 冲刺 (4/10)
    Alpha 冲刺 (3/10)
    Alpha 冲刺 (2/10)
    Alpha 冲刺 (1/10)
    项目需求分析答辩总结
    项目UML设计(团队)
    项目选题报告答辩总结
    第七次作业--项目需求分析
  • 原文地址:https://www.cnblogs.com/dancesir/p/10684585.html
Copyright © 2011-2022 走看看