HTTPS不用愁,网站证书免费取

本文给大家带来一篇实用的免费申请域名证书的方法,操作也比较简单。对于想要搭建https网站的个人或企业来说,非常实用。

当然,首先是得拥有一个域名。如何申请和解析域名可以参考各大云商服务,不在此赘述了。

本文假定读者已经购买了域名,也已配置好域名解析。

申请证书非常容易,按照码哥给的如下步骤照做即可:

建立必要目录

首先在/var/www/目录下建立challenges目录。

当然,需要注意nginx的执行用户有访问该目录的权限。

修改nginx配置

随后,我们要暂时修改一下nginx的配置,增加一个server配置,如下:

server {
        listen 80;
        server_name *.abc.com;
        location /.well-known/acme-challenge/           alias /var/www/challenges/;
        try_files $uri =404;
    }
    location / {
        return 307 https://$host$request_uri;
    }
}

如果你原本有个80的server配置,也可以只把location的部分加入到你的server配置上。

将你的域名部分配置好,reload新配置即可。

修改申请脚本

这里,码哥给出一个python3的脚本,用来向Lets申请证书,证书有效期1个月,所以脚本可以设置为crontab,按月调度。每个月最多可以执行25次(没记错的话)。脚本如下:

# -*- coding: utf-8 -*-
import subprocess
def letsencrypt(domain):
    account_key = '/etc/nginx/certs/www/'+domain + '.akey'
    domain_key = '/etc/nginx/certs/www/'+domain + '.key'
    domain_csr = '/etc/nginx/certs/www/'+domain + '.csr'
    signed_crt = '/etc/nginx/certs/www/signed.crt'
    final_crt = '/etc/nginx/certs/www/'+domain + '.crt'
    subprocess.getstatusoutput(
        'openssl genrsa 4096 > {} && openssl genrsa 4096 > {}'.format(
            account_key, domain_key
        )
    )
    subprocess.getstatusoutput(
        'openssl req -new -sha256 -key {} -subj \'/CN={}\' > {}'.format(
            domain_key, domain, domain_csr
        )
    )
    _, output = subprocess.getstatusoutput(
        '/usr/bin/python3 -m acme_tiny '
        '--account-key {} --csr {} '
        '--acme-dir "/var/www/challenges/" > {}'.format(
            account_key, domain_csr, signed_crt
        )
    )
    print(output)
    subprocess.getstatusoutput(
        'wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > /etc/nginx/certs/www/intermediate.pem'
    )
    subprocess.getstatusoutput('cat {} intermediate.pem > {}'.format(signed_crt, final_crt))
def run_job(domain):
    letsencrypt(domain)
if __name__ == '__main__':
    run_job('你的域名')

这里需要说明一下,域名证书存放的位置,笔者是存放在/etc/nginx/下自建的certs目录里,由于网站分前后台,所以前台的会再建个子目录叫www,所以就有了/etc/nginx/certs/www/这样的东东。所以这个路径大家可以因人而异自行修改。

你的域名部分配置好(例如,www.abc.com)即可,不可以使用范域名,例如*.abc.com

申请证书

执行上面的脚本:

$ sudo python3 let.py

如果有缺少模块提示,则自行百度pip3安装即可,很容易解决。

如果再遇到报错,请仔细阅读报错信息,一般会遇到的问题是:

  • 忘记将域名解析到当前服务器
  • nginx配置忘记修改或者修改后未激活新配置
  • challenges目录忘记建立或者权限有问题
  • 证书申请过多,超过当月最大上限次数

排除这几方面,基本就会看到successfully的字样表示成功了。

修改nginx配置

最后就是启用证书了,修改nginx配置,在需要使用证书的server配置下增加如下内容:

#当然不要忘记listen 443;
ssl on;
ssl_certificate /etc/nginx/certs/www/你的域名.crt;
ssl_certificate_key /etc/nginx/certs/www/你的域名.key;

你的域名与脚本中给出的域名保持一致。

reload或restart Nginx来使配置生效即可。

你可能感兴趣的:(https,linux,python,web,经验分享,程序人生,后端)