背景
- 证书可用在https,wss等需要tls加密认证的场景;
- 正式使用的环境一般都会使用收费的证书,但测试服或自己实验环境大部分都用自签名或免费的证书;
- webrtc相关的模块标准要求必须加密且不能是自签名证书;
先决条件
从背景上来看我们得想想办法来薅一薅羊毛了,但为了安全性也还是有一些准入门槛的,如下:
- 得下载一份 certbot-auto 脚本;
- 得有服务器的登录ssh权限;
- 第一次安装时得有root权限可以将脚本加入sudo list;
- 服务器必须有可用的域名已经预先解析到了本机上且能ping通,地址为本服务器的公网地址;
- 服务器上的80或443端口是空闲的如果外围有防火墙需要在防火墙上开放了公网的相应端口;
- 脚本在执行时为了校验域名被解析的主机就是你所操作的主机所以会自动开启443端口进行现场认证, 防止绑定了非法域名,还有一个注意的点就是它只能提供具体域名无法对范域名进行绑定证书;
获取证书
- 先下载可执行脚本: 详见: <wget https://dl.eff.org/certbot-auto> ;
- 放到自己的一个固定的目录如:
/home/yine/scripts
, 然后添加可执行权限:chmod a+x /home/yine/scripts/certbot-auto
; sudo -iu root
切换到root权限添加脚本到sudo列表中去,以方便后续普通用户的证书自动更新操作;- 添加sudo列表:
echo 'popo ALL = NOPASSWD: ...(其它已有指令), /home/yine/scripts/certbot-auto' > /etc/sudoers.d/yine
; sudo -iu yine
切换到普通用户;sudo /home/yine/scripts/certbot-auto certonly --standalone -d yourdomain.com --agree-tos --email youremail@gmail.com
;- 当执行成功后会在
/etc/letsencrypt
下生成相关临时文件和证书文件; /etc/letsencrypt/live/yourdomain.com/fullchain.pem
为证书文件;/etc/letsencrypt/live/yourdomain.com/privkey.pem
为证书的私钥;- 为了应用能直接访问可以修改
/etc/letsencrypt
目录归属和权限chown -R yine:studio /etc/letsencrypt
chmod -R 744 /etc/letsencrypt
;
配置应用使用
- nginx
server {
listen 80;
server_name abc.com;
rewrite ^(.*) https://abc.com permanent;
}
server{
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
server_name www.yourdomain.com;
root /web/yourdomain.com/;
}
- kamailio 在 /etc/kamailio/tls.cfg
private_key = /etc/letsencrypt/live/yourdomain.com/privkey.pem
certificate = /etc/letsencrypt/live/yourdomain.com/fullchain.pem
配置自动更新
- 在 /home/yine/scripts 下新建脚本 corn-cerbot-auto.sh
- 添加:
#!/bin/bash
sudo /home/popo/scripts/certbot-auto renew --quiet
sudo /etc/init.d/kamailio force-reload
- 在计划任务中添加(crontab -e):
0 4 1 */2 * /home/yine/scripts/corn-cerbot-auto.sh
#每两个月的一号凌晨4点更新一次
新建复制脚本
- vim corn-cerbot-auto.sh
- 脚本如下:
#!/bin/bash
sudo /home/popo/scripts/certbot-auto renew
HOME_DIR=/etc/letsencrypt/live
DOMAIN_DIR=xxx.com
DEST_DIR=/home/popo/DATA/etc/kamailio/certs/xxx.com
cd $HOME_DIR/$DOMAIN_DIR
REAL_PRIVKEY=`readlink $HOME_DIR/$DOMAIN_DIR/privkey.pem`
rm -rf $DEST_DIR/privkey.pem
cp -r $REAL_PRIVKEY $DEST_DIR/privkey.pem
chmod 777 $DEST_DIR/privkey.pem
REAL_FULLCHAIN=`readlink $HOME_DIR/$DOMAIN_DIR/fullchain.pem`
rm -rf $DEST_DIR/fullchain.pem
cp -r $REAL_FULLCHAIN $DEST_DIR/fullchain.pem
chmod 777 $DEST_DIR/fullchain.pem
sudo docker stop kamailio
sleep 3s
sudo docker start kamailio
其它生成方式
- 还有其它的依赖web的生成方式,比如nginx或apache等,需要有这样的web应用在,直接使用认证文件的方式进行;
- 详见: https://letsencrypt.org/zh-cn/getting-started/#