在centOS7 中 安装并添加 acme 免费证书,还挺好用的
系统环境: centos7
第一步: 安装 acme.sh
curl https://get.acme.sh | sh
有些系统会提示:
-bash: acme.sh: command not found
执行下面的命令让 PATH 生效即可:
source ~/.bashrc
下载证书,我是用的DNS api 的方式生成,因为这种方式功能强大,而且支持泛域名与多域名方式,还可以自动续期。
首先需要去 DNS 解析商出创建一个 DNS token. ---一个小插曲,我用的是腾讯云,但是在腾讯云出,没有找到DNS 的 token 创建的地方,才发现腾讯云的 dns 提供上是dnspod
我这里使用的是 DNS api 的模式,这种方式可以自动更新证书,功能很强大。建议使用这种方式,ACME.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的自动集成.
以dnspod(腾讯云使用的就是dnspod) 为例子:
export DP_Id="DNS管理中心创建的ID"
export DP_Key="DNS管理中心创建的Token"
acme.sh --issue --dns dns_dp -d domain.com -d *.domain.com
阿里云例子:
export Ali_Key="LTAI31Sxxxxxx"
export Ali_Secret="rUyJSUaGxxxxxxx"
acme.sh --issue --dns dns_ali -d domain.com -d *.domain.com
阿里云获取DNS token 的方式
生成结果:
然后在执行安装与copy证书到 nginx 目录下, 下面命令行的路径为,你的nginx所在路径,并新建一个ssl目录
acme.sh --installcert -d
--key-file /etc/nginx/ssl/
--fullchain-file /etc/nginx/ssl/fullchain.cer \
--reloadcmd "service nginx force-reload"
这个错误可以忽略,手动重启一下你的Nginx 就好了。
最后在配置一下你Nginx服务器,需要修改 server 项:
user www www;
worker_processes auto;
error_log /www/wwwlogs/nginx_error.log crit;
pid /www/server/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 51200;
multi_accept on;
}
http
{
include mime.types;
#include luawaf.conf;
include proxy.conf;
default_type application/octet-stream;
server_names_hash_bucket_size 512;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 50m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
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 ssl;
server_name qq249191508.com;
root /www/server/nginx/html;
index index.html index.htm;
ssl_certificate ../ssl/fullchain.cer;
ssl_certificate_key ../ssl/qq249191508.key;
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;
ssl_prefer_server_ciphers on;
location / {
index index.html index.htm;
}
}
server {
listen 80;
server_name www.qq249191508.com;
rewrite ^(.*)$ https://$host$1 permanent;
}
include /www/server/panel/vhost/nginx/*.conf;
}
然后,重启nginx 服务器,就OK了
上面,需要修改 fullchain.cer domain.key 这两个文件所安装的目录,让nginx找到这两个文件。
然后在浏览器输入你的域名,会制动跳转到 https.
备注:
Let's Encrypt 的证书有效期是 90 天的,需要定期重新申请,不过acme在安装的时候就已经设置了自动更新,ACME 是自动更新的。所以不用担心。
acme.sh自动更新原理:acme安装时会自动创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.
关注我的个人博客: http://www.qq249191508.com/