acme.sh介绍:https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8Ehtml
github:https://github.com/Neilpang/acme.shjava
安装很是简单,就一个命令,建议使用root帐户进行安装,如下演示都是root帐户。nginx
curl https://get.acme.sh | sh
安装所在的目录为 ~/.acme.sh/git
建立一个别名方便使用github
alias acme.sh=~/.acme.sh/acme.sh
安装时已经为系统建立crontab定时任务,续签证书的调度任务。能够经过 crontab -l 查看,以下web
自动检测全部的证书, 若是快过时了, 须要更新, 则会自动更新证书。bash
安装过程当中全部的修改都限制在安装目录~/.acme.sh/中,所以不用担忧对已有的系统任何功能和文件污染。
服务器
假设为 www.mydomain.com 这个域名配置证书。session
在生成以前须要先安装 socat ,使用以下命令安装dom
mkdir ~/src cd ~/src wget http://www.dest-unreach.org/socat/download/socat-1.7.3.0.tar.gz tar -xf socat-1.7.3.0.tar.gz cd socat-1.7.3.0 ./configure --prefix=$HOME make make install
下面开始正式生成ssl证书,生成证书的方式有多种,能够参考:https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert
在今生成证书的方案选择standalone方式(须要80端口不被占用,acme.sh 本身做为一个web服务临时监听80端口完成证书验证),因为此时服务器(nginx)已经占用80端口
经过咨询acme.sh做者续签问题,注:因为使用nginx服务,后面会一直占用80端口,以下:
因此最终咱们的生成证书命令为:
acme.sh --issue -d www.mydomain.com --standalone --pre-hook "/nginx/nginx/sbin/nginx -s stop" --post-hook "/nginx/nginx/sbin/nginx"
其中 /nginx/nginx/sbin/nginx 为本身服务器中nginx执行文件
成功以后,生成的证书目录在:/root/.acme.sh/www.mydomain.com
2.1中也有提到生成签名须要80端口不被占用,那么问题来了,后面服务器要启动nginx,并且须要占用80端口,因此上面的续签订时是有问题的,因此crontab定时修改以下:
crontab -e
44 3 * * * source ~/.bash_profile && ~/.acme.sh/acme.sh --issue -d www.mydomain.com --standalone --pre-hook "/nginx/nginx/sbin/nginx -s stop" --post-hook "/nginx/nginx/sbin/nginx" > /dev/null
保存便可!注:crontab定时中须要绝对路径。
#ssl upstream mydomain7777 { server 127.0.0.1:7777 weight=1; } server { listen 443 ssl; server_name www.mydomain.com; location / { proxy_pass http://mydomain7777; proxy_redirect default; client_max_body_size 10m; #表示最大上传10M,须要多大设置多大。 #设置主机头和客户端真实地址,以便服务器获取客户端真实IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Scheme $scheme; } ssl_certificate /root/.acme.sh/www.mydomain.com/fullchain.cer; ssl_certificate_key /root/.acme.sh/www.mydomain.com/www.mydomain.com.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; }
还能够配置http强制转https(可选)
server { listen 80; server_name www.mydomain.com; rewrite ^(.*) https://$server_name$1 permanent; }
注:proxy_set_header X-Forwarded-Scheme $scheme; 配置是为了程序中获取到请求协议(http或者https),以java为例获取代码以下:
String scheme = request.getHeader("X-Forwarded-Scheme");
if (scheme == null) {
scheme = request.getScheme();
}
参考博客:
1. http://www.javashuo.com/article/p-udlfwlst-ep.html
另外有dns生成ssl证书的方式,请参考 http://www.javashuo.com/article/p-gbowfucd-dr.html