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

【保姆级喂饭教程】【抽丝剥茧知识讲解】服务器更换SSL证书 目录前言一、SSL证书简介二、证书选型三、购买SSL证书三、创建并申请SSL证书四、部署SSL证书1. 查看SSL证书有效期2. 获取证书文件3. 登录服务器确认Web服务器软件3.1 检查进程3.2 检查版本3.3 浏览器查询3.4 nginx: command not found3.5 nginx两种安装方式默认目录4. 定位配置文件查找旧证书位置5. 备份并更换SSL证书5.1 记录信息5.2 备份配置和证书文件5.3 更换新的证书文件6. 重新加载nginx配置五、总结参考文献前言公司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 检查进程# 检查进程主要方法psaux|grep-E(nginx|httpd|apache)# 更精确地检查常见服务的状态# 检查Nginx (如果存在)systemctl status nginx# 或 service nginx status# 检查Apache (如果存在)systemctl status httpd# 或 service apache2 status (Ubuntu)systemctl status apache23.2 检查版本也可以通过查看版本# 查看nginx版本nginx-v# 获取更详细的版本信息包括Nginx的编译参数等ngixn-V3.3 浏览器查询该方法只做了解还可以通过浏览器f12刷新对应网址查看随便一个请求的相应标头的server打开浏览器的开发者工具按F12或右键点击页面 → “检查”。切换到 Network网络 标签页。刷新页面F5你会看到所有网络请求的列表。点击第一个请求通常是 (index) 或主域名的请求然后查看 Headers请求头 部分。在 Response Headers响应头 中找到 Server 字段。它的值通常会告诉你Web服务器的类型和版本例如Server: nginx → 说明是 NginxServer: Apache → 说明是 ApacheServer: Microsoft-IIS/10.0 → 说明是 IISServer: cloudflare → 说明网站经过了Cloudflare代理隐藏了真实服务器信息可能看到的是代理或负载均衡器而非真实源站如果公司使用了反向代理如Nginx作为反向代理、CDN如Cloudflare、阿里云CDN或负载均衡器如F5、HAProxyServer 头显示的可能是这些中间层的软件而不是真正安装证书的那台后端服务器。例如你可能会看到 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的路径sudofind/-typef-namenginx.conf2/dev/null这里找到两条第一条是gitlab自带的不用管那么就可以确定配置文件的路径了接下来开始找证书的配置位置注意nginx配置文件时递归嵌套的搜索的时候不能有遗漏ssl默认配置格式一般在443端口服务中有ssl_certificate和ssl_certificate_key两个关键字server{listen443ssl;server_name ***.***.com;root /home/***/dist;include /etc/nginx/default.d/*.conf;ssl_certificate cert/***.com.pem;# 或 .crtssl_certificate_key cert/***.com.key;location /{***}}递归搜索包含ssl_certificate的配置文件grep-r-n--include*.confssl_certificate/etc/nginx/命令注释-r递归搜索-n显示匹配行的行号–include“*.conf”只搜索 .conf 文件可根据实际情况调整比如 sites-enabled/ 下的文件可能没有后缀可以去掉 --include 或改为其他模式/etc/nginx/搜索的根目录如果都在一个位置就正常如果在多个位置但是是一样的证书要么之后更新的时候在每个文件夹内替换要么改到同一位置推荐后者如果你有很多域名很多证书找到以后还可以验证一下证书是不是你打算更换的域名# 查看证书详情openssl x509-in/etc/nginx/cert/***.com.pem-text-nooutnot before和not after是开始日期和结束日期5. 备份并更换SSL证书5.1 记录信息首先最重要的就是记录信息不然下次还得找一次服务器IP端口账号密码使用的Web服务器软件Nginx/Apache。配置文件的具体路径主配置文件和443端口所在文件。证书和私钥文件的存放路径5.2 备份配置和证书文件养成好习惯更换任何文件先备份# 备份证书文件sudocp/etc/nginx/cert/***.com.key /etc/nginx/cert/***.com.key.$(date%Y%m%d).backupsudocp/etc/nginx/cert/***.com.pem /etc/nginx/cert/***.com.pem.$(date%Y%m%d).backup# 备份Nginx配置sudocp/etc/nginx/nginx.conf /etc/nginx/nginx.conf.$(date%Y%m%d).backupsudocp/etc/nginx/conf.d/industrymap.conf /etc/nginx/conf.d/industrymap.conf.$(date%Y%m%d).backup5.3 更换新的证书文件一般终端工具都带文件夹窗口删除原来的两个证书后拖入即可如果有需要可以在配置文件中调整证书路径这时候备份就有用了6. 重新加载nginx配置# 测试配置文件语法绝对关键的一步sudonginx-t# 如果测试成功重新加载配置平滑重启不会中断服务sudonginx-sreload还可以再验证一下新的证书openssl x509-in/etc/nginx/cert/***.com.pem-text-noout可以看到证书的日期更新了也可以访问相关网址按照之前的方法进行验证如果是编译安装那就需要用nginx详细路径来执行命令# 测试配置文件语法绝对关键的一步sudo/usr/local/nginx/sbin/nginx-t# 如果测试成功重新加载配置平滑重启不会中断服务sudo/usr/local/nginx/sbin/nginx-sreload五、总结前面是包含着知识讲解的流程正常来说我们证书的文件名是已知且固定的一般命名为域名.pem/key这样就十分简单了第一次还是假设不知道位置sudofind/-typef-name***.com.key2/dev/null直接就找到了具体位置了第二次流程# 备份证书文件sudocp/etc/nginx/cert/***.com.key /etc/nginx/cert/***.com.key.$(date%Y%m%d).backupsudocp/etc/nginx/cert/***.com.pem /etc/nginx/cert/***.com.pem.$(date%Y%m%d).backup# 删除并上传文件# 测试语法sudonginx-t# 重新加载配置sudonginx-sreload参考文献什么是SSL证书购买正式证书SSL 证书选型指南喜欢的点个关注吧祝你永无bug~/* _ooOoo_ o8888888o 88 . 88 (| -_- |) O\ /O ____/---\____ . \\| |// . / \\||| : |||// \ / _||||| -:- |||||- \ | | \\\ - /// | | | \_| \---/ | | \ .-\__ - ___/-. / ___. . /--.--\ . . __ . .___\_|_/___. . | | : - \.;\ _ /;./ - : | | \ \ -. \_ __\ /__ _/ .- / / -.____-.___\_____/___.-____.- --- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 佛祖保佑 永无BUG */