今天服務器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