目录
前言
公司ssl证书到期了,需要更换一下新的,做个简单记录
一、SSL证书简介
SSL 证书(现行行业标准为 TLS 证书)是一种数字证书,用于验证网站身份并加密浏览器与服务器之间的通信。证书由受信任的证书颁发机构 (CA) 签发,是实现 HTTPS 协议、保障数据传输安全与完整性的基础。
核心价值
部署SSL/TLS证书是现代网站的必要安全措施,主要解决以下问题:
-
数据加密:通过加密客户端(如浏览器)与 Web 服务器之间的传输数据,防止敏感数据被非法截取或篡改。
-
身份验证:验证服务器的合法性,防止用户访问仿冒或钓鱼网站。
-
提升浏览器信任:消除浏览器“不安全”警告,在地址栏显示安全锁标志。
-
合规性保障:满足等保 2.0、PCI DSS 等网络安全与数据保护法规的要求。
-
搜索引擎优化 (SEO):主流搜索引擎会优先索引 HTTPS 网站,有助于提升搜索排名。
工作原理
SSL/TLS 协议采用混合加密机制:通过非对称加密验证身份,通过对称加密传输数据。
证书签发与验证(信任链构建)
-
生成请求:服务器生成密钥对(RSA 2048 位或 ECC 256 位),将公钥及组织信息封装为 CSR(证书签名请求)。
-
CA 签名:CA 验证域名所有权后,从 CSR 中提取公钥和申请者信息,结合颁发者信息、有效期及扩展字段构造证书内容,使用 CA 私钥进行数字签名,生成符合 X.509 标准的证书。
-
信任传递:浏览器通过预置的根证书逐级验证服务器证书签名,建立信任链。
加密会话建立(TLS 握手)
-
握手启动:客户端发送 ClientHello 消息,包含支持的协议版本和密码套件列表。
-
证书传递:服务器响应 ServerHello 消息并发送证书链。
-
身份验证:客户端验证证书的有效期和域名匹配性,并通过 CRL(证书吊销列表)或 OCSP(在线证书状态协议)确认证书未被吊销。部分部署采用 OCSP Stapling 技术优化此过程。
-
密钥交换:双方通过密钥交换机制生成会话密钥。
-
ECDHE 模式(推荐):双方各自生成临时密钥对并交换公钥,独立计算出相同的会话密钥。
-
RSA 模式(传统):客户端生成预主密钥,使用服务器公钥加密后传输;服务器解密后,双方派生会话密钥。
-
-
对称通信:握手完成后,所有数据使用会话密钥进行对称加密传输。
二、证书选型
问题1:需要保护多少个域名?
-
单个域名(如 aliyun.com 或 login.aliyun.com):选择 单域名证书。
-
一个主域名下的所有子域名(如 *.aliyun.com):选择 通配符域名证书。
-
多个不同类型的域名(如 *.aliyun.com, taobao.com):选择 混合域名证书(购买页勾选是否合并签发)。
说明
购买部分证书时,系统会自动赠送关联域名。详见证书赠送域名规则。
问题2:网站属于哪种类型?
-
个人网站、开发测试环境:选择
DV(域名验证型)证书。仅验证域名所有权,平均1~15分钟内自动签发,成本较低。 -
企业官网、内部信息系统:选择
OV(企业验证型)证书。需验证企业身份,安全性更高,证书详情中显示企业名称,平均签发时长为5个自然日。 -
金融、电商、政府等高安全要求网站:选择
EV(增强验证型)证书。采用极其严格的身份验证标准,是信任级别最高的证书。在证书详情中会显示完整的企业名称,能最大限度地增强用户信任感。平均签发时长为5个自然日。
问题3:如何选择证书品牌?
-
国际知名度要求:DigiCert 在全球市场拥有广泛认可度。
-
注重服务稳定性:GeoTrust 和 GlobalSign 均为成熟的国际证书服务商。
-
成本敏感型应用:RapidSSL 和 WoSign 提供基础证书服务。
-
政府及金融行业应用:CFCA 具备相关行业资质认证。
-
国密算法应用场景:CFCA、WoSign 和 vTrus 均支持国密标准。
以上为快速选型建议,更为全面的选型方案,请参见SSL 证书选型指南。
三、购买SSL证书
阿里云的数字证书管理服务(原SSL证书)提供证书域名等服务,SSL证书管理中可以购买正式证书和DigiCert提供的免费证书

单域名DV一年大概200-500左右,OV一年2000-5000,现在SSL证书单次有效期最长一年了,但是可以买多份托管自动续期

三、创建并申请SSL证书
本次不涉及,领导直接给了文件

四、部署SSL证书
1. 查看SSL证书有效期
部署之前让我们先了解下怎么查看有效期
随便打开一个网址,以baidu.com为例,点击网址前面的设置图标

可以看到百度用的是GlobalSign证书,有效期到26年8月10日

点击详细信息可以看到SSL证书链上的根证书和中间证书,下面有更详细的字段,点击不晚于也可以查看有效截止日期

2. 获取证书文件
公司使用的是RapidSSL证书,性价比较高
证书文件是一个key文件和一个pem文件

3. 登录服务器,确认Web服务器软件
SSL证书需要部署到被保护域名使用的每一台服务器
登录服务器后,第一件事是确认它到底用的什么Web服务器。国内基本上都是Nginx,这里我们走下流程
3.1 检查进程
# 检查进程,主要方法
ps aux | grep -E '(nginx|httpd|apache)'
# 更精确地检查常见服务的状态
# 检查Nginx (如果存在)
systemctl status nginx # 或 service nginx status
# 检查Apache (如果存在)
systemctl status httpd # 或 service apache2 status (Ubuntu)
systemctl status apache2

3.2 检查版本
也可以通过查看版本
# 查看nginx版本
nginx -v
# 获取更详细的版本信息,包括Nginx的编译参数等
ngixn -V

3.3 浏览器查询
该方法只做了解
还可以通过浏览器f12,刷新对应网址,查看随便一个请求的相应标头的server
-
打开浏览器的开发者工具(按F12,或右键点击页面 → “检查”)。
-
切换到 Network(网络) 标签页。
-
刷新页面(F5),你会看到所有网络请求的列表。
-
点击第一个请求(通常是 (index) 或主域名的请求),然后查看 Headers(请求头) 部分。
-
在 Response Headers(响应头) 中,找到 Server 字段。它的值通常会告诉你Web服务器的类型和版本,例如:
-
Server: nginx → 说明是 Nginx
-
Server: Apache → 说明是 Apache
-
Server: Microsoft-IIS/10.0 → 说明是 IIS
-
Server: cloudflare → 说明网站经过了Cloudflare代理,隐藏了真实服务器信息
-

-
可能看到的是代理或负载均衡器,而非真实源站
如果公司使用了反向代理(如Nginx作为反向代理)、CDN(如Cloudflare、阿里云CDN)或负载均衡器(如F5、HAProxy),Server 头显示的可能是这些中间层的软件,而不是真正安装证书的那台后端服务器。例如,你可能会看到 Server: cloudflare,但后端其实是Apache。 -
服务器可能隐藏或修改了 Server 头
出于安全考虑,很多运维人员会配置隐藏真实的 Server 版本,甚至完全移除这个字段。有些可能会自定义为其他名字(比如 Server: MyCompany),这时就无法直接判断了。 -
只能看到你当前访问的服务器
如果网站有多台服务器做负载均衡,浏览器每次访问可能命中不同的后端。你通过F12看到的只是其中一台,无法保证这五台服务器用的都是同一种软件,也无法覆盖所有服务器。 -
无法获得配置文件的具体路径、证书位置等关键信息
F12只能告诉你软件类型,但无法告诉你证书存放在哪里、配置文件路径是什么。这些信息依然需要登录服务器才能获取。
3.4 nginx: command not found
有时候比较特殊,检查进程是有的,但是状态和版本都是没有命令,如下

这是因为nginx有两种安装方式,一种是包管理安装,一种是编译安装,没有添加到系统PATH中。
所以无法直接使用命令,但是进程是有的
3.5 nginx两种安装方式默认目录
源码编译安装(默认路径):
- 安装主目录:/usr/local/nginx/
- sbin 子目录:/usr/local/nginx/sbin/,存放 Nginx 可执行文件
包管理器安装(如 apt、yum):
- 安装主目录:/etc/nginx/(配置文件为主)
- 可执行文件通常位于系统级命令目录:/usr/sbin/nginx,并通过符号链接或系统路径调用
4. 定位配置文件,查找旧证书位置
我们要更换ssl证书,就需要找到ssl证书位置,ssl证书在nginx的配置文件中配置,所以我们要搜索配置文件。
首先我们要找配置文件所在路径
- 如果是包管理安装,一般在
/etc/nginx/,也可以通过状态和版本命令中查看 - 如果是编译安装,默认在
/usr/local/nginx/ - 更常规一点,我们直接搜索nginx.conf的路径
sudo find / -type f -name "nginx.conf" 2>/dev/null
这里找到两条,第一条是gitlab自带的,不用管,那么就可以确定配置文件的路径了

接下来开始找证书的配置位置
注意nginx配置文件时递归嵌套的,搜索的时候不能有遗漏
ssl默认配置格式,一般在443端口服务中,有ssl_certificate和ssl_certificate_key两个关键字
server {
listen 443 ssl;
server_name ***.***.com;
root /home/***/dist;
include /etc/nginx/default.d/*.conf;
ssl_certificate cert/***.com.pem; # 或 .crt
ssl_certificate_key cert/***.com.key;
location / {
***
}
}
递归搜索包含ssl_certificate的配置文件
grep -r -n --include="*.conf" "ssl_certificate" /etc/nginx/
命令注释:
-
-r:递归搜索
-
-n:显示匹配行的行号
-
–include=“*.conf”:只搜索 .conf 文件(可根据实际情况调整,比如 sites-enabled/ 下的文件可能没有后缀,可以去掉 --include 或改为其他模式)
-
/etc/nginx/:搜索的根目录
如果都在一个位置就正常

如果在多个位置,但是是一样的证书,要么之后更新的时候在每个文件夹内替换,要么改到同一位置,推荐后者

如果你有很多域名很多证书,找到以后还可以验证一下证书,是不是你打算更换的域名
# 查看证书详情
openssl x509 -in /etc/nginx/cert/***.com.pem -text -noout
not before和not after是开始日期和结束日期

5. 备份并更换SSL证书
5.1 记录信息
首先,最重要的就是记录信息,不然下次还得找一次
-
服务器IP,端口,账号,密码
-
使用的Web服务器软件(Nginx/Apache)。
-
配置文件的具体路径(主配置文件和443端口所在文件)。
-
证书和私钥文件的存放路径

5.2 备份配置和证书文件
养成好习惯,更换任何文件先备份
# 备份证书文件
sudo cp /etc/nginx/cert/***.com.key /etc/nginx/cert/***.com.key.$(date +%Y%m%d).backup
sudo cp /etc/nginx/cert/***.com.pem /etc/nginx/cert/***.com.pem.$(date +%Y%m%d).backup
# 备份Nginx配置
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.$(date +%Y%m%d).backup
sudo cp /etc/nginx/conf.d/industrymap.conf /etc/nginx/conf.d/industrymap.conf.$(date +%Y%m%d).backup
5.3 更换新的证书文件
一般终端工具都带文件夹窗口,删除原来的两个证书后拖入即可

如果有需要,可以在配置文件中调整证书路径,这时候备份就有用了
6. 重新加载nginx配置
# 测试配置文件语法(绝对关键的一步!)
sudo nginx -t
# 如果测试成功,重新加载配置(平滑重启,不会中断服务)
sudo nginx -s reload

还可以再验证一下新的证书
openssl x509 -in /etc/nginx/cert/***.com.pem -text -noout
可以看到证书的日期更新了

也可以访问相关网址按照之前的方法进行验证

如果是编译安装,那就需要用nginx详细路径来执行命令
# 测试配置文件语法(绝对关键的一步!)
sudo /usr/local/nginx/sbin/nginx -t
# 如果测试成功,重新加载配置(平滑重启,不会中断服务)
sudo /usr/local/nginx/sbin/nginx -s reload
五、总结
前面是包含着知识讲解的流程,正常来说,我们证书的文件名是已知且固定的,一般命名为域名.pem/key
这样就十分简单了
第一次还是假设不知道位置
sudo find / -type f -name "***.com.key" 2>/dev/null
直接就找到了具体位置了

第二次流程
# 备份证书文件
sudo cp /etc/nginx/cert/***.com.key /etc/nginx/cert/***.com.key.$(date +%Y%m%d).backup
sudo cp /etc/nginx/cert/***.com.pem /etc/nginx/cert/***.com.pem.$(date +%Y%m%d).backup
# 删除并上传文件
# 测试语法
sudo nginx -t
# 重新加载配置
sudo nginx -s reload
参考文献
喜欢的点个关注吧><!祝你永无bug~
/*
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\ = /O
____/`---'\____
.' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
佛祖保佑 永无BUG
*/
1952

被折叠的 条评论
为什么被折叠?



