let'encript 解決證書問題

今天服務器let'encript證書過時了,年紀大了老忘,不得不把別人的博客看一遍,就是由於我不想定時任務執行acme_tiny.py,仍是寫個文檔記下,好久不寫對外博客了,冒個泡。python

一、建立普通域名私鑰nginx

openssl genrsa 4096 > domain.keygit

二、單個域名('xxx.xxx.com')github

openssl req -new -sha256 -key domain.key -subj "/CN=域名" > domain.csrweb

三、域名驗證小程序

搭建一個web服務,以nginx爲例,配置nginx.conf文件,並保證處於啓動狀態,而且外網80能訪問微信小程序

server {服務器

    listen 80;微信

    server_name 域名;session

    location ^~ /.well-known/acme-challenge/ {

        alias /tmp/ssl/;  //隨便設置一個服務器上已經存在的目錄

        try_files $uri =404;

    }

}

四、在目錄/path/to獲取網站證書

下載證書生成工具acme_tiny

wget https://raw.githubusercontent.com/diafygi/acme-tiny/master/acme_tiny.py

openssl建立一個私鑰account.key用於acme_tiny.py 帳戶account-key

openssl genrsa 4096 > account.key

指定帳戶私鑰、CSR 、驗證目錄

python acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /tmp/ssl/> ./signed.crt

建立中間證書並和網站證書融合

wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem

cat signed.crt intermediate.pem > chained.pem

注意中間證書跟網站證書版本必定要保證一致,否則即便,網站訪問的時候雖然沒有問題,可是一些嚴格必須遵循ssl第三方服務平臺會認證不經過,好比:微信小程序

 

給nginx 443端口配置上咱們生成的證書

server {

    listen 443;

    server_name 域名;

    ssl on;

    ssl_certificate /path/to/chained.pem;

    ssl_certificate_key /path/to/domain.key;

    ssl_session_timeout 5m;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;

    ssl_session_cache shared:SSL:50m;

    ssl_prefer_server_ciphers on;

}

 另外該證書有效期只有90天,能夠把上面的命令行寫成一個.sh命令用crontab跑起來

#!/usr/bin/sh
python /path/to/acme_tiny.py --account-key /path/to/account.key --csr /path/to/domain.csr --acme-dir /tmp/ssl/ > /tmp/signed.crt || exit wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem cat /tmp/signed.crt intermediate.pem > /path/to/chained.pem service nginx reload
相關文章
相關標籤/搜索