用acme.sh签发Let's Encrypt证书

这几天用certbot签发Let’s Encrypt证书的时候发现了各种问题, 有Python版本问题以及pip源问题. 反正就是各种蠢 对我这样一个使用者来说Python制造的问题比它解决的问题还多 于是开始使用国人制作的shell工具acme.sh来签发, 这个工具安装使用很简单, 安装: curl https://get.acme.sh | sh 使用: # 使用手动dns验证 acme.sh --issue -d example.com --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please # 续签 acme.sh --issue -d example.com --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --renew # 续签ecc acme.sh --issue -d example.com --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --renew --ecc # 签发384位密钥的ecc证书 acme.sh --issue -d example.com --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --keylength ec-384 # 签发泛域名证书 acme.sh --issue -d example.com -d '*.exmaple.com' --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --keylength ec-384 第一次执行的时候会提示你需要设定的TXT记录,设定好以后再次执行就可以获取到证书了. »

使用certbot工具签发泛域名证书

Let’s Encrypt的泛域名证书计划2月27日正式发布,结果临近的时候突然宣布延期了.本以为会像ECC中间证书延期一样等不到了,结果今天一大早就看到了正式发布的消息. 看到了acme.sh已经正式支持泛域名证书签发的消息,结果acme.sh支持的dns验证暂时并不支持我所使用的Google Cloud DNS. 于是尝试使用certbot(这也是一直以来我使用的签发工具). 其实和签发单域名的方法差不多,只是需要多一个--server参数 ./certbot-auto \ --server https://acme-v02.api.letsencrypt.org/directory \ --manual \ --preferred-challenges dns-01 certonly 接着会让你填入需要签发的域名,直接输入类似*.example.com就好. 后面的dns认证就和单域名一样了. 当然上一步你可以选择传入csr文件: ./certbot-auto \ --server https://acme-v02.api.letsencrypt.org/directory \ --manual \ --preferred-challenges dns-01 certonly \ --csr domain.csr 这样可以同时签发出多域名和ECC证书. »

Author image 月杪 on #SSL,

利用iodine为Ocserv提供本地DNS服务

起因 尝试在同一台Linux上同时安装Ocserv和Dnsmasq,并将Ocserv的DNS配置指向Dnsmasq,然而不管是走内网IP还是外网IP都完全不工作.发邮件询问Ocserv作者本人收到的回复也是建议我检查Dnsmasq的配置.鬼都知道Dnsmasq配置不可能有问题啦! 后来猜测是虚拟网卡的原因,于是尝试自己建立内网DNS隧道来搞定它. 安装及配置 # 安装 apt-get install iodine # 启动 nohup iodined -f 10.10.10.10 gov.com & 启动后通过ifconfig能查看到已经生成了名为dnsx的虚拟网卡,地址为10.10.10.10. dns0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1130 inet 10.10.10.10 netmask 255.255.255.224 destination 10.10.10.10 unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 配置Dnsmasq 配置好DNS隧道以后就可以将Dnsmasq的监听地址修改为相应的地址 # vi /etc/dnsmasq. »

使用LetsEncrypt签发多域名ECC证书

克隆certbot cd /opt git clone https://github.com/certbot/certbot.git 配置openssl.cnf cp /etc/ssl/openssl.cnf /opt/certbot/ vi openssl.cnf # 在[ v3_req ]标签下添加 subjectAltName = @alt_names [ alt_names ] DNS.1 = example.com DNS.2 = www.example.com DNS.3 = sub.example.com ... 生成CSR文件 openssl ecparam -genkey -name secp384r1 > ec.key openssl req -new -sha384 -key ec.key -out ec-der.csr -outform der -config openssl.cnf 通过LetsEncrypt签发证书 ./certbot-auto certonly -a webroot --webroot-path=/var/www/html -d example.com -d www.example.com ... --csr ec-der.csr 通过此方法生成的证书将在certbot工具目录下生成 0000_cert.pem # crt.pem 0000_chain.pem # chain. »

为Nginx添加TLS1.3支持

Nginx主线分支从1.13.0版本开始支持TLS1.3,只需要在编译的时候选择使用OpenSSL支持TLS1.3的分支进行编译即可. 使用对应的OpenSSL分支进行编译 # OpenSSL对TLS1.3的支持已经到了draft19,不过Chrome和Firefox对TLS1.3的支持还在draft18 git clone -b tls1.3-draft-18 --single-branch https://github.com/openssl/openssl.git openssl 然后在预编译的时候选择该分支,并添加额外选项--with-openssl-opt=enable-tls1_3. 其他操作参考手动编译Nginx支持ALPN,以在最新版Chrome中支持HTTP/2. 浏览器设定 Firefox目前最新版已经默认开启TLS1.3支持(如果不是新安装的Firefox那么可能依然需要检查about:config中的对应设定). Chrome需要在chrome:flags中将TLS 1.3选项调整为Enabled (Draft) 测试 Firefox: Chrome: 已知问题 由于nginx-ct目前并不支持TLS1.3,所以如果Certificate Transparency是靠该方案实现的话那么开启TLS1.3后无法继续显示Certificate Transparency信息. 该问题在Letsencrypt自带CT信息后得到一定缓解,某些商业证书也不需要nginx-ct来实现CT信息. 更新(September,12,2018) TLS1.3最终定稿rfc8446,Openssl-1.1.1在几个小时前也正式发布支持. 目前Firefox Nightly版已经支持,Chrome从70开始也支持了. »

生成申请 ECC 证书所需的 CSR 文件

# 生成rsa证书csr openssl genrsa -out moonagic.com.key 2048 openssl req -new -key moonagic.com.key -out moonagic.com.csr # 生成ecc证书key # -name 参数可以自己选择 secp521r1, prime256v1 或者是下面所用的 secp384r1 openssl ecparam -genkey -name secp384r1 -out moonagic.com-ecc.key openssl req -new -sha384 -key moonagic.com-ecc.key -out moonagic.com-ecc.csr »

Author image 月杪 on #SSL,

Setup LetsEncrypt on Debian

Install LetsEncrypt Client git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt Obtain a Certificate Inside the nginx config, add this location block: location ~ /\.well-known/acme-challenge { root /var/www/html; } Reload Nginx: systemctl reload nginx Generate Certificate: cd /opt/letsencrypt ./letsencrypt-auto certonly -a webroot \ --webroot-path=/var/www/html \ -d example.com \ -d www.example.com »