标签 证书 下的文章

ikev2自动更新let's encrypt证书

由于ikev2不能使用通配符证书,使用免费一年期证书存在一定风险(比如阿里云,通过证书可以找到跟域名关联的账号,进而实名查水表),所以推荐使用let's encrypt证书。但是let's encrypt证书有一个问题就是有效期只有三个月,所以写了个脚本自动更新证书。

以下以dns更新证书方式,域名dns服务商为cloudflare为例,服务器需要已经使用ikev2自动安装脚本安装ikev2(可以选择自签名证书),python包管理工具pip,

首先拿到cloudflare的Global API Key,目前certbot还不支持cloudflare的 zone api key

创建脚本使用的cloudflare的账号密码文件,记住路径填写到脚本的CLOUDFLARE_CREDENTIALS后

# Cloudflare API credentials used by Certbot
dns_cloudflare_email = cloudflare@example.com
dns_cloudflare_api_key = 0123456789abcdef0123456789abcdef01234567

并修改密码文件权限为400,防止certbot报错

chmod 0400 #文件路径

自动更新脚本,CERT_DOMAIN是ikev2证书的域名,CLOUDFLARE_CREDENTIALS是cloudflare账号密码文件路径,LE_EMAIL是let's encrypt证书联系邮箱(证书过期提醒)

脚本会检测是否安装certbot,域名证书是否第一次签发,证书是否需要更新,并将新证书复制到ipsec的证书目录

#! /bin/bash
CERT_DOMAIN=vpn.example.com
CLOUDFLARE_CREDENTIALS='/root/letsencrypt/cloudflarednsapi.conf'
LE_EMAIL='example@gmail.com'


function checkcertbot(){
if [ -z "`pip list certbot-dns-cloudflare |grep certbot-dns-cloudflare`" ];
then
pip install certbot-dns-cloudflare
fi
}

function checkcert(){
if [ ! -f "/etc/letsencrypt/live/${CERT_DOMAIN}/cert.pem" ];
then renewipseccert
else
CERT_EXPIRE=$(openssl x509 -checkend 1728000 -noout -in /etc/letsencrypt/live/$CERT_DOMAIN/cert.pem|grep not)
if [ -z "$CERT_EXPIRE" ];
then
renewipseccert
else
echo "The cert will not expire in 20 days,nothing to do."
fi
fi
}


function renewipseccert(){
/usr/local/bin/certbot  certonly -d ${CERT_DOMAIN} \
--agree-tos \
--non-interactive \
--email $LE_EMAIL  \
--dns-cloudflare \
--dns-cloudflare-credentials ${CLOUDFLARE_CREDENTIALS}
cp /etc/letsencrypt/live/$CERT_DOMAIN/chain.pem /usr/local/etc/ipsec.d/cacerts/ca.cert.pem
cp /etc/letsencrypt/live/$CERT_DOMAIN/cert.pem /usr/local/etc/ipsec.d/certs/server.cert.pem
cp /etc/letsencrypt/live/$CERT_DOMAIN/privkey.pem /usr/local/etc/ipsec.d/private/server.pem
service ipsec restart
}

checkcertbot
checkcert

在crontab里添加每5天执行一次即可

crontab -e
0 0 */5 * * #脚本路径

在ssl2buy.com购买通配符证书

在阿里云申请的单域名证书过期了,由于设备众多需要重新申请,索性买个通配符证书(wildcard俗称野卡)。为什么不用letsencrypt的通配符证书,每三个月更新一次证书还不如阿里云的单域名一年更新一次。

经过简单了解,选择了ssl2buy.com购买证书,确实别别的地方便宜一些。
这次购买的是alphassl的40刀一年,购买了2年。
付款后按提示开始配置,需要自己生成csr(Certificate Signing Request),这里使用https://csrgenerator.com/
天好心情信息后会生成如下

-----BEGIN CERTIFICATE REQUEST-----


-----END CERTIFICATE REQUEST-----
-----BEGIN PRIVATE KEY-----


-----END PRIVATE KEY-----

把上面生成的第一部分

-----BEGIN CERTIFICATE REQUEST-----


-----END CERTIFICATE REQUEST-----

填入配置页面,会有个选择域名认证的方式,我选择了dns,
会给你一个txt的根域,解析生效后在配置页面点击验证。
几分钟后就会生成通配符域名证书
这里没有中间证书,为了移动设备等的兼容性需要配置好中间证书,这里通过一个工具来补全https://myssl.com/chain_download.html
保存为fullchain.pem
然后把第一步中

-----BEGIN PRIVATE KEY-----


-----END PRIVATE KEY-----

保存为privkey.pem
nginx中修改成这两个文件即可。

proxmox配置https证书、端口、源和关闭订阅提醒

proxmox安装完后默认管理地址是https://IP:8006,由于是自签名证书,所以浏览器打开提示证书错误。
一、修改证书及端口让浏览器正常打开。
1,安装pve时配置固定ip,配置域名解析到这个ip
2,申请域名证书
3,ssh登陆到pve,找到/etc/pve/nodes/<主机名>/<主机名>-ssl.key和<主机名>-ssl.pem,把pem和key替换成域名证书内容
4,由于8006端口是写入二进制文件的,所以不能从配置文件修改,这里通过iptables添加端口转发

iptables -t nat -I PREROUTING -d <IP> -p tcp --dport 443 -j DNAT --to-destination <IP>:8006

iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8006

5,禁止外部访问8006端口

iptables -A INPUT -s 127.0.0.1 -p tcp --dport 8006 -j ACCEPT
iptables -A INPUT -p TCP --dport 8006 -j REJECT

iptables -A INPUT -i ! lo -p tcp --dport 8006 -j DROP

6,保存iptables

iptables-save > /etc/iptables.up.rules
echo -e '#!/bin/sh\n/sbin/iptables-restore < /etc/iptables.up.rules' > /etc/network/if-pre-up.d/iptables
chmod +x /etc/network/if-pre-up.d/iptables

这样浏览器打开https://你的域名,就是正常的了。

二、配置更新源
1,删除原来的企业源

rm /etc/apt/sources.list.d/pve-enterprise.list

2,添加官方免费源

echo 'deb http://download.proxmox.com/debian/pve stretch pve-no-subscription' >>/etc/apt/sources.list.d/pve-free.list

3,更新

apt update

三、关闭订阅提醒
1,编辑文件

nano /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js

control+w 搜索data.status,把if(data.status!=='Active') 修改为if(false),control+x保存退出
2,退出重新登陆
3,此方法可能在升级pve后失效,失效后再修改即可

esxi修改https证书,不再提示不可信

ESXi 安装后会默认自动生成证书,浏览器报不可信,网页提供的证书上传的功能不可用。

通过SSH手动替换证书是个相对可靠方便的方法。

注:连接了vCenter的主机需要跟vCenter走,本例为独立主机。

首先在面板或DCUI中启用SSH。

登录后,

cd /etc/vmware/ssl
ls
里面的 rui.crt 和 rui.key 就是需要改的证书了。

有需要的可以先备份一下,然后,

vi rui.crt
修改,贴入签名过的证书。

vi rui.key
修改,贴入证书密钥。

注意 .key 是只读文件,保存时可以用 :wq! 强制保存。

证书替换后不是即时生效,需要重启。