美文网首页
Let's Encrypt 申请ssl证书

Let's Encrypt 申请ssl证书

作者: 骑着大象去上班 | 来源:发表于2020-12-19 15:08 被阅读0次
    1.安装acme.sh

    https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E

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

    在该脚本的安装过程不会污染已有的系统任何功能和文件, 所有的修改都限制在安装目录中: ~/.acme.sh/
    安装完后执行acme.sh,如果提示命令没找到,执行下列命令

    source ~/.bashrc
    

    运行后会创建一条 alias和定时任务 ,如果不放心,可以手动再添加一次。

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

    用crontab -l可以看到自动创建的定时任务


    image.png
    2.配置acme

    这里以cloudflare为例


    image.png image.png

    设置变量值,把刚才的key和你Cloudflare邮箱填上去。

    export CF_Key="key"
    export CF_Email="你的邮箱"
    
    3.生成证书

    domain.com换成你的域名

    acme.sh  --issue  --dns dns_cf -d domain.com -d *.domain.com
    

    如果出现下面错误可以将~/.acme.sh文件夹删除后重新安装即可


    image.png

    生成后,证书会放在 ~/.acme.sh/ 目录里,但是由于过期什么的证书会变化,所以不要直接使用。而是使用acme.sh –install-cert命令复制到指定目录,目录位置和名字由你设置,–reloadcmd可以设置你操作后执行的命令,由于我移动到/usr/local/nginx/ssl目录下,需要提前创建目录。

    mkdir -p /usr/local/nginx/ssl
    
    acme.sh --install-cert -d domain.com \
    --cert-file      /usr/local/nginx/ssl/cert.pem  \
    --key-file       /usr/local/nginx/ssl/key.pem  \
    --fullchain-file /usr/local/nginx/ssl/fullchain.pem  \
    --reloadcmd   "service nginx restart"
    
    3.nginx配置证书
    user nginx nginx;
    worker_processes  auto;
    
    error_log  logs/error.log;
    error_log  logs/error.log  notice;
    error_log  logs/error.log  info;
    
    pid        logs/nginx.pid;
    
    events {
        worker_connections  10240;
        multi_accept on;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        sendfile        on;
        tcp_nopush      on;
        tcp_nodelay     on;
    
        keepalive_timeout  65;
    
        client_max_body_size 16M;
        server_names_hash_bucket_size 512;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
    
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 256k;
        fastcgi_intercept_errors on;
    
        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.1;
        gzip_comp_level 2;
        gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
        gzip_vary on;
        gzip_proxied   expired no-cache no-store private auth;
        gzip_disable   "MSIE [1-6]\.";
    
        limit_conn_zone $binary_remote_addr zone=perip:10m;
        limit_conn_zone $server_name zone=perserver:10m;
    
        server_tokens off;
        access_log off;
    
        server {
            listen 443;
            server_name  domain.com www.domain.com;
            index  index.html index.htm index.php;
            root   html/blog;
    
            ssl on;
            ssl_certificate /usr/local/nginx/ssl/cert.pem;
            ssl_certificate_key /usr/local/nginx/ssl/key.pem;
            ssl_session_timeout 5m;
            ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
            ssl_prefer_server_ciphers on;  
    
            location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
            {
                expires      30d;
            }
    
            location ~ .*\.(js|css)?$
            {
                expires      12h;
            }
    
            location ~ /\.ht {
                deny  all;
            }
        }
    
        server {
            listen 80;
            server_name domain.com www.domain.com;
            rewrite ^(.*)$ https://$host$1 permanent;
        }
    #拒绝IP直接访问
        server {
            listen 80 default;
            server_name _;
            return 403;
          }
    
    }
    

    以上是api自动dns方式,手动dns方式和HTTP 方式,dns方式的好处是, 你不需要任何服务器, 不需要任何公网 ip, 只需要 dns 的解析记录即可完成验证。

    HTTP 方式

    http 方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了.

    acme.sh  --issue  -d clsn.io -d *.clsn.io  --webroot  /www/wwwroot/clsn.io/
    

    只需要指定域名, 并指定域名所在的网站根目录. acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后会聪明的删除验证文件. 整个过程没有任何副作用.
    如果你用的 apache服务器, acme.sh 还可以智能的从 apache的配置中自动完成验证, 你不需要指定网站根目录:

    acme.sh --issue  -d clsn.io   --clsn.io
    

    如果你用的 nginx服务器, 或者反代, acme.sh 还可以智能的从 nginx的配置中自动完成验证, 你不需要指定网站根目录:

    acme.sh --issue  -d clsn.io  --nginx
    

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

    acme.sh  --issue -d clsn.io   --standalone
    

    更高级的用法请参考: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert

    相关文章

      网友评论

          本文标题:Let's Encrypt 申请ssl证书

          本文链接:https://www.haomeiwen.com/subject/mnqcnktx.html