概要
VCO管理界面使用的公信SSL证书都存在有效期,需要在有效期到期前进行更换。本文主要梳理VCO公信证书更新流程和少量公信SSL证书知识。
- 如果在平台部署中并没有考虑使用公信SSL证书,并且在激活VCE和VCG时都是忽略证书,可以忽略本文。
关于SSL证书相关知识,可以移步关于SSL证书你需要知道
VCO管理界面SSL证书替换
前期准备
- 有效的公信SSL证书(包含证书,中间CA证书,根CA证书)以及相应的私钥(VCO使用证书和私钥为BASE64编码PEM格式。)
- VCO SSH账号密码(需要登录到底层Ubuntu系统进行替换)
替换步骤
步骤一 检查证书
通常证书机构会提供两部分证书,中间CA证书和我们申请的证书,目前大部分情况下都是BASE64编码PEM格式的文件
我们可以重命名文件添加或编辑文件名后缀为*.crt,在Windows上可以直接打开查看。
虽然我们直接打开证书能显示完整的证书链,但是我们通过记事本工具打开证书文件,其实里面只有我们申请的证书信息。
- 由于Windows上本身存有公信CA证书和中间CA证书,所以系统会根据证书信息自动补全整个证书链信息呈现给用户。
- 我们最后导入VCO的SSL证书,需要确保证书链完整,
server.crt
必须包含申请的证书,中间CA证书,根CA证书,这三部分缺一不可。
至此我们现在还缺少根CA证书,我最长用的办法就是通过Firefox浏览器获取(如果自己有更效率的办法也可以)。
首先我们需要先收集一下根证书的相关信息
打开浏览器设置,找到安全与隐私,把页面拉到最下方,查看证书,找到目标CA,点击View可以查看证书详情。
核对信息一致后,将根CA证书进行下载。
到这步我们就获得三部分证书,即我们申请的证书,中间CA证书和根CA证书。接下去我们需要把这三部分依次拼接成一个server.crt
文件。
拼接其实很简单,将三部分证书文件按次序贴在一个记事本文件中即可,格式和顺序如下:
-----BEGIN CERTIFICATE-----
所申请的证书
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
中间CA证书
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
根CA证书
-----END CERTIFICATE-----
将文本保存成*.crt格式,直接在PC打开,能够正常打开,并能查看到完整证书链信息,系统提示的证书状态也是OK。
- 常规情况下证书应该只有这三大段,但是在整合前应该检查每段证书证书链。证书机构存在吊销和合并的可能,签发的证书CA也会存在历史遗留信息。
比如我博客使用证书,打开ca-bundle
文件,就有历史证书链信息。我们需要把每一段证书复制到记事本,制作成证书文件,打开检查信息。把真正有效的部分提取出来。
步骤二 上传证书和私钥到服务器
可以通过WinSCP等工具将准备好的证书和私钥上传到服务器目录(由于账户权限问题可以先放在/home/$USER$或是/tmp下)
-
登录VCO(VCO支持SCP和SFTP)
-
上传证书和私钥文件
-
直接在VCO上创建相应的文件,将准备好的证书内容粘贴也是可以的。
步骤三 将文件复制到目录
cd $Directory$ #文件上传到的目录
sudo cp server.key server.crt /etc/nginx/velocloud/ssl/
步骤四 更改私钥权限
sudo chmod 600 /etc/nginx/velocloud/ssl/server.key
步骤五 重启Nginx服务
sudo services nginx restart
排障
- SSL证书是否完整
当证书已经上传完成,如何判断证书是否完整正确,可以访问https://www.ssllabs.com/ 点击Test your server
输入你想检测的网站,但是网站还是有一定缺憾的,比如他只检查443端口的网站。
SSL Labs会对你的网站做一次关于SSL的体检,给出一个评分和完整体检报告
如果有问题也会所有体现,如下图提示服务器上的证书的证书链不完整
网站为了减少频繁检查同一个网站,所以存在缓存,如果要重新检查点击Clear cache
清理缓存
- Nginx服务是否正常
service nginx status #查看Nginx服务状态
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/nginx.service.d
└─override.conf
Active: active (running) since Wed 2020-12-23 03:20:20 UTC; 3 days ago
Docs: man:nginx(8)
Process: 9820 ExecReload=/usr/sbin/nginx -g daemon on; master_process on; -s reload (code=exited, status=0/SUCCESS)
Main PID: 8267 (nginx)
Tasks: 9 (limit: 4915)
CGroup: /system.slice/nginx.service
├─8267 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
├─9821 nginx: worker process
├─9822 nginx: worker process
├─9823 nginx: worker process
├─9824 nginx: worker process
├─9825 nginx: worker process
├─9826 nginx: worker process
├─9827 nginx: worker process
└─9828 nginx: worker process
Dec 23 03:20:20 vco-test-01 systemd[1]: Starting A high performance web server and a reverse proxy server...
Dec 23 03:20:20 vco-test-01 systemd[1]: Started A high performance web server and a reverse proxy server.
其他命令:
service nginx restart #重启Nginx服务状态
service nginx start #启动Nginx服务状态
service nginx stop #停止Nginx服务状态
# 如果操作不成功,会直接提示Fail
查看Nginx日志/var/log/nginx/error.log
:
tail -20 /var/log/nginx/error.log
2020/12/26 03:14:47 [crit] 9822#9822: *74106 SSL_do_handshake() failed (SSL: error:14209102:SSL routines:tls_early_post_process_client_hello:unsupported protocol) while SSL handshaking, client: 167.99.208.118, server: 0.0.0.0:443
2020/12/26 03:14:49 [crit] 9827#9827: *74112 SSL_do_handshake() failed (SSL: error:141CF06C:SSL routines:tls_parse_ctos_key_share:bad key share) while SSL handshaking, client: 167.99.208.118, server: 0.0.0.0:443