目前越来越多的网站开始支持https。Lets Encrypt提供免费的ssl证书服务,发现很多同学都在使用。 最近阅读Lets Encrypt花三分钟免费接入ssl证书, 发现已经有同学写了脚本进行证书获取,调用python写的acme_tiny。

配置使用

1.下载脚本和配置文件

默认脚本执行完成后,未重新加载nginx,需要在脚本最后追加重启nginx.

nginx程序在 /opt/nginx/sbin/nginx,网站的根目录 /home/www-root/www.gophper.com/dest

执行命令

mkdir -p /home/www-root/www.gophper.com/ssl
cd  /home/www-root/www.gophper.com/ssl
wget https://raw.githubusercontent.com/xdtianyu/scripts/master/lets-encrypt/letsencrypt.conf  
wget https://raw.githubusercontent.com/xdtianyu/scripts/master/lets-encrypt/letsencrypt.sh  
chmod +x letsencrypt.sh
echo "/opt/nginx/sbin/nginx -s reload">>letsencrypt.sh

2.修改配置文件(letsencrypt.conf)

DOMAIN_KEY 执行key的名字,一般使用网站名字命名。我使用的是gophper

DOMAIN_DIR 设置网站根目录

DOMAINS 添加访问的域名支持添加多个

	# only modify the values, key files will be generated automaticly.
	ACCOUNT_KEY="letsencrypt-account.key"
	DOMAIN_KEY="gophper.key"
	DOMAIN_DIR="/home/www-root/www.gophper.com/dest"
	DOMAINS="DNS:gophper.com,DNS:www.gophper.com"
	#ECC=TRUE
	#LIGHTTPD=TRUE

3.执行脚本,获取证书及私钥

脚本执行前脚本使用前保证网站根目录能够正常访问。因为需要访问 /.well-known目录进行验证。。。

./letsencrypt.sh letsencrypt.conf 

4.添加crontab

Lets Encrypt 支持90天,90天后需要重新申请。配置crontab 每月1号自动申请

	0  0    1 * *   root    /home/www-root/www.gophper.com/ssl/letsencrypt.sh /home/www-root/www.gophper.com/ssl/letsencrypt.conf

####5.脚本执行完,配置nginx(/opt/nginx/vhost/www.gophper.com.conf )

	server {
	   listen 80;
	   server_name gophper.com www.gophper.com;	
	   return 301 https://$server_name$request_uri;
	}
	server {
	  listen 443 ssl;
	  ssl_certificate /home/www-root/www.gophper.com/ssl/gophper.chained.crt;
	  ssl_certificate_key /home/www-root/www.gophper.com/ssl/gophper.key;
	  server_name gophper.com www.gophper.com;
	  root  /home/www-root/www.gophper.com/dest;
	  access_log  /opt/logs/www.gophper.com/access.log  access;
	  index index.php index.html index.htm;
	  error_page 404 /archive.html;
	  location / {
	        proxy_set_header REMOTE-HOST $remote_addr;
	        proxy_set_header   Referer $http_referer;
	        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	  }
	  location /share {
	   	autoindex on;   
	        charset utf-8,gbk;
	   	autoindex_exact_size off;  
	  	autoindex_localtime on;	
	  }
	}

##FAQ

证书重置请求超过次数,一般 3 次,子域名除外。就会出现 Sign failed: “detail”:”Error creating new cert :: Too many certificates already issued for exact set of domains: devhitao.com, 5 天以后才可以再次重置