zoukankan      html  css  js  c++  java
  • centos7利用acme.sh获取Let's Encrypt的永久免费ssl证书并配置网站域名https访问

    acme.sh介绍:https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E

    github:https://github.com/Neilpang/acme.sh

     1. 安装 acme.sh

    安装非常简单,就一个命令,建议使用root账户进行安装,以下演示都是root账户。

    curl  https://get.acme.sh | sh

    安装所在的目录为 ~/.acme.sh/

    创建一个别名方便使用

    alias acme.sh=~/.acme.sh/acme.sh

    安装时已经为系统创建crontab定时任务,续签证书的调度任务。可以通过 crontab -l 查看,如下

    自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书。

    安装过程中所有的修改都限制在安装目录~/.acme.sh/中,因此不用担心对已有的系统任何功能和文件污染。

    2. 生成SSL证书

    2.1

    假设为 www.mydomain.com 这个域名配置证书。

    在生成之前需要先安装 socat ,使用如下命令安装

    mkdir ~/src
    cd ~/src
    wget http://www.dest-unreach.org/socat/download/socat-1.7.3.0.tar.gz
    tar -xf socat-1.7.3.0.tar.gz 
    cd socat-1.7.3.0
    ./configure --prefix=$HOME
    make
    make install

    下面开始正式生成ssl证书,生成证书的方式有多种,可以参考:https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert

    在此生成证书的方案选择standalone方式(需要80端口不被占用,acme.sh 自己作为一个web服务临时监听80端口完成证书验证),由于此时服务器(nginx)已经占用80端口

    通过咨询acme.sh作者续签问题,注:由于使用nginx服务,后面会一直占用80端口,如下:

    所以最终我们的生成证书命令为:

    acme.sh --issue -d www.mydomain.com --standalone --pre-hook "/nginx/nginx/sbin/nginx -s stop" --post-hook "/nginx/nginx/sbin/nginx"

    其中 /nginx/nginx/sbin/nginx 为自己服务器中nginx执行文件

    成功之后,生成的证书目录在:/root/.acme.sh/www.mydomain.com

    2.2 续签相关

    2.1中也有提到生成签名需要80端口不被占用,那么问题来了,后面服务器要启动nginx,而且需要占用80端口,所以上面的续签定时是有问题的,所以crontab定时修改如下:

    crontab -e

    44 3 * * * source ~/.bash_profile && ~/.acme.sh/acme.sh --issue -d www.mydomain.com --standalone --pre-hook "/nginx/nginx/sbin/nginx -s stop" --post-hook "/nginx/nginx/sbin/nginx" > /dev/null

    保存即可!注:crontab定时中需要绝对路径。

    3. nginx配置SSL证书

        #ssl
        upstream mydomain7777 {
            server 127.0.0.1:7777  weight=1;
        }
        server {
            listen       443 ssl;
            server_name  www.mydomain.com;
    
            location / {
                proxy_pass http://mydomain7777;
                proxy_redirect default;
                client_max_body_size 10m; #表示最大上传10M,需要多大设置多大。
                #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Scheme $scheme;
            }
    
            ssl_certificate      /root/.acme.sh/www.mydomain.com/fullchain.cer;
            ssl_certificate_key  /root/.acme.sh/www.mydomain.com/www.mydomain.com.key;
    
            ssl_session_cache    shared:SSL:1m;
            ssl_session_timeout  5m;
    
            ssl_protocols  SSLv2 SSLv3 TLSv1;
            ssl_ciphers  HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers  on;
        }

    还可以配置http强制转https(可选)

        server {
            listen       80;
            server_name  www.mydomain.com;
            rewrite ^(.*) https://$server_name$1 permanent;
        }

    注:proxy_set_header X-Forwarded-Scheme $scheme; 配置是为了程序中获取到请求协议(http或者https),以java为例获取代码如下:

    String scheme = request.getHeader("X-Forwarded-Scheme");
    if (scheme == null) {
        scheme = request.getScheme();
    }

    参考博客:

    1. https://my.oschina.net/u/3042999/blog/1858891

    2. https://community.webfaction.com/questions/21246/trying-to-use-lets-encrypt-using-acmesh-need-socat-tools

    另外有dns生成ssl证书的方式,请参考 https://www.cnblogs.com/007sx/p/11379966.html

  • 相关阅读:
    absolute之后居中宽度自适应
    定位网页元素(5)
    浮动(4)
    Android的方法和属性(1)
    Activity步骤
    JSP的指令
    边框和边距(3)
    计算机快件键
    字体、文本、背景、列表样式和超链接(2)
    c/s和b/s的区别
  • 原文地址:https://www.cnblogs.com/007sx/p/11370713.html
Copyright © 2011-2022 走看看