【保姆级喂饭教程】【抽丝剥茧知识讲解】服务器更换SSL证书

前言

公司ssl证书到期了,需要更换一下新的,做个简单记录

一、SSL证书简介

SSL 证书(现行行业标准为 TLS 证书)是一种数字证书,用于验证网站身份并加密浏览器与服务器之间的通信。证书由受信任的证书颁发机构 (CA) 签发,是实现 HTTPS 协议、保障数据传输安全与完整性的基础。

核心价值
部署SSL/TLS证书是现代网站的必要安全措施,主要解决以下问题:

  • 数据加密:通过加密客户端(如浏览器)与 Web 服务器之间的传输数据,防止敏感数据被非法截取或篡改。

  • 身份验证:验证服务器的合法性,防止用户访问仿冒或钓鱼网站。

  • 提升浏览器信任:消除浏览器“不安全”警告,在地址栏显示安全锁标志。

  • 合规性保障:满足等保 2.0、PCI DSS 等网络安全与数据保护法规的要求。

  • 搜索引擎优化 (SEO):主流搜索引擎会优先索引 HTTPS 网站,有助于提升搜索排名。

工作原理
SSL/TLS 协议采用混合加密机制:通过非对称加密验证身份,通过对称加密传输数据。

证书签发与验证(信任链构建)

  1. 生成请求:服务器生成密钥对(RSA 2048 位或 ECC 256 位),将公钥及组织信息封装为 CSR(证书签名请求)。

  2. CA 签名:CA 验证域名所有权后,从 CSR 中提取公钥和申请者信息,结合颁发者信息、有效期及扩展字段构造证书内容,使用 CA 私钥进行数字签名,生成符合 X.509 标准的证书。

  3. 信任传递:浏览器通过预置的根证书逐级验证服务器证书签名,建立信任链。

加密会话建立(TLS 握手)

  1. 握手启动:客户端发送 ClientHello 消息,包含支持的协议版本和密码套件列表。

  2. 证书传递:服务器响应 ServerHello 消息并发送证书链。

  3. 身份验证:客户端验证证书的有效期和域名匹配性,并通过 CRL(证书吊销列表)或 OCSP(在线证书状态协议)确认证书未被吊销。部分部署采用 OCSP Stapling 技术优化此过程。

  4. 密钥交换:双方通过密钥交换机制生成会话密钥。

    • ECDHE 模式(推荐):双方各自生成临时密钥对并交换公钥,独立计算出相同的会话密钥。

    • RSA 模式(传统):客户端生成预主密钥,使用服务器公钥加密后传输;服务器解密后,双方派生会话密钥。

  5. 对称通信:握手完成后,所有数据使用会话密钥进行对称加密传输。


二、证书选型

问题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_certificatessl_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

参考文献

什么是SSL证书
购买正式证书
SSL 证书选型指南


喜欢的点个关注吧><!祝你永无bug~

/*
                   _ooOoo_
                  o8888888o
                  88" . "88
                  (| -_- |)
                  O\  =  /O
               ____/`---'\____
             .'  \\|     |//  `.
            /  \\|||  :  |||//  \
           /  _||||| -:- |||||-  \
           |   | \\\  -  /// |   |
           | \_|  ''\---/''  |   |
           \  .-\__  `-`  ___/-. /
         ___`. .'  /--.--\  `. . __
      ."" '<  `.___\_<|>_/___.'  >'"".
     | | :  `- \`.;`\ _ /`;.`/ - ` : | |
     \  \ `-.   \_ __\ /__ _/   .-` /  /
======`-.____`-.___\_____/___.-`____.-'======
                   `=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            佛祖保佑       永无BUG
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝吻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值