• 搜索
  • 夜间模式
    ©2015-2025  Ethan's Blog Theme by OneBlog
    搜索
    标签
    # Amule # Gargoyle # LUCI # VIM # Python # Nginx # 反代 # Ansible # Apache # LNMP
  • 首页>
  • Linux>
  • 正文
  • 更新博客程序及SSL证书

    2018年08月18日 28 阅读 0 评论 5909 字

    需要给网站弄上SSL证书了,之前用的是acme_tiny这个小程序,后面看到网上有更好的程序,用法简单,更方便,叫做acme.sh,于是就开始用这个东西折腾了。

    获取程序

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

    执行完后会讲程序安装到~/.acme.sh/目录下并且给你自动添加一个定时任务,每天0点自动检查证书,如果快过期了就自动更新证书,我们直接参照官方的使用说明做。

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

    生成证书

    acme.sh  --issue  -d mydomain.com -d www.mydomain.com  --webroot  /home/wwwroot/mydomain.com/

    当然你可以使用--appache或者--nginx参数让其自动识别网站根目录而无需指定--webroot参数

    acme.sh --issue  -d mydomain.com   --apache
    acme.sh --issue  -d mydomain.com   --nginx

    你以为这就很NB了?更牛逼的是,引用官方的话:

    注意, 无论是 apache 还是 nginx 模式, acme.sh在完成验证之后, 会恢复到之前的状态, 都不会私自更改你本身的配置. 好处是你不用担心配置被搞坏, 也有一个缺点, 你需要自己配置 ssl 的配置, 否则只能成功生成证书, 你的网站还是无法访问https. 但是为了安全, 你还是自己手动改配置吧
    如果你还没有运行任何 web 服务, 80 端口是空闲的, 那么 acme.sh 还能假装自己是一个webserver, 临时听在80 端口, 完成验证:
    acme.sh --issue -d mydomain.com --standalon

    域名所有权验证

    在生成证书的过程中需要验证域名的所有权,有两个方式

    • http方式,会在网站根目录下放置一个文件
    • dns方式,需要同时配置Automatic DNS API(不配置则无法自动更新证书)和添加txt域名解析记录,优点是没有服务器没公网IP都可以申请,我用的就是这个方法,因为我用第一个方法失败了

    DNS API详情去官网看,有很多的API,我用的是阿里云,API里面也有阿里云的API,所以直接用官方的API。

    export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
    export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"

    这个Ali_Key和Ali-Secret是需要去阿里云上面去生成的。导入相关信息后,直接运行命令生成证书即可。

    acme.sh --issue --dns dns_ali -d mydomain.com -d *.mydomain.com

    运行命令后,如果不报错,会自动添加一个txt解析记录,并让你等待120S生效,然后验证,成功后即可生成证书到~/.acme.sh/domain目录下。

    下一次更新证书就用以下命令

    acme.sh --renew -d mydomain.com --dns *.mydomain.com

    手动DNS验证方式

    如果没有运行任何网站,也不想使用standalone等模式,可以使用--dns参数,首先执行下面命令

    acme.sh --issue --dns -d mydomain.com -d *.mydomain.com --yes-I-know-dns-manual-mode-enough-go-ahead-please

    当提示添加TXT解析后,到dns解析面板按提示内容添加TXT解析内容,然后再次执行如下命令即可生成证书

    acme.sh --renew --dns -d mydomain.com -d *.mydomain.com --yes-I-know-dns-manual-mode-enough-go-ahead-please

    安装证书

    证书生成后,需要将证书正确安装(copy)到指定目标位置,不要使用默认证书的保存位置。

    acme.sh --install-cert -d mydomain.com \
    --cert-file /etc/pki/tls/mydomain.com.cer \
    --key-file /etc/pki/tls/mydomain.com.key \
    --fullchain-file /etc/pki/tls/fullchain.cer \
    --reloadcmd "systemctl reload nginx"

    官方用法:

    acme.sh  --install-cert  -d  <domain>.com   \
    --key-file   /etc/nginx/ssl/<domain>.key \
    --fullchain-file /etc/nginx/ssl/fullchain.cer \
    --reloadcmd  "service nginx force-reload"

    更新acme.sh

    acme.sh --upgrade # 手动更新
    acme.sh --upgrade --auto-upgrade # 自动升级
    acme.sh --upgrade --auto-upgrade 0 # 关闭自动升级

    排错

    如果在使用过程中出现错误,使用debug参数排查

    acme.sh --issue ..... --debug
    或者
    acme.sh --issue ..... --debug 2

    Nginx配置:

    修改这两个证书位置即可

    ssl_certificate "/etc/pki/tls/fullchain.cer";
    ssl_certificate_key "/etc/pki/tls/mydomain.com.key";

    是时候备份一下Nginx配置文件了

    # For more information on configuration, see:
    #   * Official English Documentation: http://nginx.org/en/docs/
    #   * Official Russian Documentation: http://nginx.org/ru/docs/
    
    user nginx;
    worker_processes auto;
    error_log /var/log/nginx/error.log;
    pid /run/nginx.pid;
    
    include /usr/share/nginx/modules/*.conf;
    events {
        worker_connections 1024;
    }
    
    http {
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile            on;
        tcp_nopush          on;
        tcp_nodelay         on;
        keepalive_timeout   65;
        types_hash_max_size 2048;
    
        include             /etc/nginx/mime.types;
        default_type        application/octet-stream;
        include /etc/nginx/conf.d/*.conf;
    
        server {
            listen       80 default_server;
            listen       [::]:80 default_server;
            server_name  mydomain.com;
            root         /var/www/html;
            index index.php index.html;
            return 301 https://$server_name$request_uri;
            include /etc/nginx/default.d/*.conf;
    
            if (!-e $request_filename) {
                rewrite ^(.*)$ /index.php$1 last;
            }
     
            location ~ .*\.php(\/.*)*$ {
                include fastcgi.conf;
                fastcgi_pass  127.0.0.1:9000;
            }
    
        }
    
        server {
            listen       443 ssl http2 default_server;
            listen       [::]:443 ssl http2 default_server;
            server_name  mydomain.com;
            root         /var/www/html;
            index index.php index.html;
            ssl_certificate "/xxx/fullchain.cer";
            ssl_certificate_key "/xxx/mydomain.com.key";
            ssl_session_cache shared:SSL:1m;
            ssl_session_timeout  10m;
            ssl_ciphers HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers on;
            gzip on;
            gzip_vary on;
            gzip_proxied any;
            gzip_comp_level 6;
            gzip_buffers 16 8k;
            gzip_http_version 1.1;
            gzip_types image/svg+xml text/plain text/html text/xml text/css text/javascript application/xml application/xhtml+xml application/rss+xml application/javascript application/x-javascript application/x-font-ttf application/vnd.ms-fontobject font/opentype font/ttf font/eot font/otf;
    
            include /etc/nginx/default.d/*.conf;
    
            if (!-e $request_filename) {
                rewrite ^(.*)$ /index.php$1 last;
            }
     
            location ~ .*\.php(\/.*)*$ {
                include fastcgi.conf;
                fastcgi_pass  127.0.0.1:9000;
            }
    
            fastcgi_intercept_errors on;
            error_page 404 500 502 503 504 = https://mydomain.com;
    
        }
    
    }
    本文著作权归作者 [ Ethan ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    — END —
    Copyright©2015-2025  All Rights Reserved.  Load:0.008 s
    Theme by OneBlog V3.6.3
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。