Use acme.sh to issue LET'S ENCRYPT cert with cygwin for Windows OS

标题为什么是英文 因为用中文写太长了而且还拗口, 干脆用英文写...

 

现在证书申请越来越普及,逐渐从收费向免费过渡,所以从申请证书来讲现在是比较容易的,出名的也很多比如赛门铁克,GeoTrust等等,我这篇写的是最近比较火的LET'S ENCRYPT,同样是免费CA证书,支持自动续签,申请证书非常方便

申请证书的方式有2种,一种是certbot,之前申请单个站点的证书的时候用过,然后也只能申请单个站点,所以就放弃了。第二种是acme也就是接下来要讲的

首先感谢开源插件acme.sh:https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E

及https://blog.853lab.com/2018/09/post_1965.html#comment-864

 

  1. 目录

    1、安装cygwin

    2、申请证书

    3、修改apache配置

    4、设置apache重定向


 

1、安装cygwin

下载cygwin安装包运行,一直下一步到选择镜像,可以用163的镜像也可以随便选一个。据说163下东西稍微快一点

http://mirrors.163.com/cygwin/

Use acme.sh to issue LET'S ENCRYPT cert with cygwin for Windows OS_第1张图片

安装需要的包:curl、cron、bzip2、wget、gcc-core、gcc-g++、make、openssh、lynx、cygrunsrv

Use acme.sh to issue LET'S ENCRYPT cert with cygwin for Windows OS_第2张图片

配置环境变量

Use acme.sh to issue LET'S ENCRYPT cert with cygwin for Windows OS_第3张图片

然后可以看到在安装目录下有cygwin.bat 这就是终端

 

2、申请证书

申请证书有HTTP验证和DNS验证2种方式。在前文提到的插件中都有说明,这里就不细说了,我选择的是DNS方式验证。这种方式好处在于可以根据阿里云的key和secret自动进行DNS验证不用手动添加TXT

#设置阿里云accesskey和secret
export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"

#通过阿里云DNS申请证书
acme.sh --issue --dns dns_ali -d example.com -d *.example.com

#把生成的证书copy到自建目录
acme.sh --install-cert -d example.com -d *.example.com \
--cert-file /targetpath/example.com.cert.pem \
--key-file /targetpath/example.com.key.pem \
--fullchain-file /targetpath/example.com.fullchain.pem

在申请证书的时候可以把泛域名*.example.com放在前面这样证书生成出来在网站上看到的授权域名就是*.example.com,据说这样看起来比较吊 :)

重要:在API文档里install命令其实还有个参数--reloadcmd,文档解释说这个参数非常重要,但是我在cygwin中第一次使用的时候报错了。后来在文档里找到说在windows上使用cygwin生成证书时reloadcmd确实不能用,如果要进行证书监控达到自动续签的目的就需要自己写crontab了

安装cygwin的时候有写一个包名字叫cygrunsrv这个包,只有装了这个包才能在cygwin中执行crontab。现在先让我们写一个脚本执行issue和copy的命令

#!/usr/bin/bash
echo "starting issue cert"
/home/Administrator/.acme.sh/acme.sh --issue --dns dns_ali -d example.com -d *.example.com
echo "cert issue complete"
sleep 3
echo "moving cert"
/home/Administrator/.acme.sh/acme.sh --install-cert -d example.com -d *.example.
com \
--cert-file E:\\targetpath\\51towin.com.cert.pem \
--key-file E:\\targetpath\\51towin.com.key.pem \
--fullchain-file E:\\targetpath\\51towin.com.fullchain.pem

echo "move cert complete"

然后配置cygrunsrv来执行crontab,这句话的意思是把crond设置为系统任务并开机启动并且可以让多用户访问。可以把as yourself设置为yes提高安全性

$ cron-config
Do you want to remove or reinstall it (yes/no) yes
Do you want to install the cron daemon as a service? (yes/no) yes
Enter the value of CYGWIN for the daemon: [ ] ntsec
Do you want the cron daemon to run as yourself? (yes/no) no
Do you want to start the cron daemon as a service now? (yes/no) yes

然后就可以设置crontab来配置你自己的定时器了

#以编辑器形式编辑定时器
crontab -e

#设置一个定时器 每10天的凌晨12点启动 运行之前写的脚本
0 0 */10 * * /home/Administrator/.acmecron

 

3、修改apache配置

apache添加HTTPS配置我就不细说了。在配置完成后,在httpd-ssl.conf配置文件中添加或修改以下配置:

SSLCertificateFile "E:/targetpath/example.com.cert.pem"
SSLCertificateKeyFile "E:/targetpath/example.com.key.pem"
SSLCertificateChainFile "E:/targetpath/example.com.fullchain.pem"

然后在httpd-vhosts.conf配置文件中添加443端口配置


ServerName example.com
SSLEngine on
SSLProxyEngine on
SSLCertificateFile "E:/targetpath/example.com.cert.pem"
SSLCertificateKeyFile "E:/targetpath/example.com.key.pem"
ProxyRequests Off

	Require all granted

ProxyPass / http://127.0.0.1:8083/ smax=5 max=20 ttl=120 retry=300
ProxyPassReverse / http://127.0.0.1:8083/

配置就完成了。但是因为之前在httpd.conf配置文件中配置了80端口的HTTP转发,如果用户访问的还是HTTP域名是不会转发到HTTPS域名的。所以需要在apache中配置转发

 

4、设置apache重定向

修改httpd.conf配置文件

#放开重定向模块
LoadModule rewrite_module modules/mod_rewrite.so

#设置HTTP转发到HTTPS

 ServerName example.com
 #ProxyPass / http://127.0.0.1:8083/ smax=5 max=20 ttl=120 retry=300  
 #ProxyPassReverse / http://127.0.0.1:8083/
 Redirect / https://example.com/

这就实现了强制转向到HTTPS域名的配置

你可能感兴趣的:(SSL,SSL,CA,LET'S,ENCRYPT)