Ubuntu服务器上为Apache网站安装部署SSL证书详细步骤
做网站运维这几年,我接过最多的需求就是“帮我把网站加上绿锁”。HTTP时代早就过去了,Chrome地址栏那个“不安全”的红色标签,对个人博客和中小型企业网站来说都极其劝退。我自己的几台Ubuntu服务器上跑着Apache,从最开始的裸HTTP到现在全面HTTPS,中间踩过的坑不少,尤其是证书文件路径搞混、链证书漏配这类问题,几乎每次帮别人排查都能遇到。这篇文章就把我在Ubuntu环境下给Apache网站装SSL证书的完整操作记录下来,从证书获取、环境准备、虚拟主机配置到强制跳转和自动续期,一条龙讲清楚。不管你是刚买了一台云服务器准备给网站上锁的新手,还是已经配过证书但对某些细节模棱两可的老手,这篇文章应该都能给你一些参考。
1. 装证书前必须搞清楚的几件事
1.1 证书类型选错,后面全是白干
很多朋友上来就问“SSL证书怎么装”,但真正动手之前,先得搞清楚自己拿到的是哪种证书。市面上常见的有DV(域名验证)、OV(组织验证)、EV(增强验证)三种,但对Apache部署来说,关键不在于验证级别,而在于证书文件的格式和数量。
通常从证书服务商那里下载下来,会得到一个压缩包,解压后里面有这样几类文件:
.crt或.pem:服务器证书,也就是你的域名专属公钥证书。.ca-bundle或.chain.crt:证书链文件,包含中间证书,用来补齐浏览器到根证书之间的信任链。.key:私钥文件,这个自始至终都留在服务器上,千万不能泄露。
我自己常用的是阿里云免费DV证书,单域名一年期,个人网站和小企业官网完全够用。下载时选择Apache服务器类型,解压后能看到xxx_public.crt和xxx_chain.crt两个文件,加上你自己生成或服务商提供的xxx.key,三个文件凑齐就可以开始配置了。
1.2 证书文件放哪里,是个被忽略的坑
我第一次给服务器配证书的时候,图省事直接扔在/root目录下,结果Apache的www-data用户没权限读取,折腾了半天才通过openssl命令定位到问题。后来我统一按照下面的目录结构存放,清晰又安全:
bash复制sudo mkdir -p /etc/apache2/ssl
sudo chmod 700 /etc/apache2/ssl
然后通过SCP或者直接粘贴上传证书和私钥文件到这个目录。需要特别注意的是,chmod 700这个权限设定很有必要,如果目录权限设成755,其他用户就能读取目录内的私钥文件,这对生产环境来说是个不小的安全隐患。
1.3 确认Apache已经启用SSL模块
Ubuntu下Apache的模块管理非常方便。先检查SSL模块是否已经启用:
bash复制sudo apache2ctl -M | grep ssl
如果输出里有ssl_module (shared),说明模块已启用。如果没有,执行:
bash复制sudo a2enmod ssl
sudo systemctl restart apache2
另外headers模块也建议一起启用,后面配置HSTS和跳转时会用到:
bash复制sudo a2enmod headers
这一步在配置证书之前做,免得后面重启服务时看到Invalid command 'SSLEngine'这类报错才想起来没装模块。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 从零申请一张免费的DV证书
2.1 为什么推荐免费DV证书
市面上SSL证书价格差异极大,从免费到几万块的都有。对大多数个人博客、企业展示站、甚至部分API服务来说,DV证书是性价比最高的选择。它验证的就是“你确实拥有这个域名”而已,加密强度和OV、EV证书没有本质区别,浏览器地址栏同样能亮起小锁。
我常年维护的几台服务器,用的都是阿里云上的免费DV证书。每年到期前在控制台重新申请一颗,下载解压,替换服务器上的旧文件,重载Apache,全程十分钟以内。有些朋友嫌一年一换麻烦,后面我会专门讲怎么用acme.sh实现Let's Encrypt证书的自动化申请和续期,那个更省心。
2.2 阿里云免费证书申请流程速记
在阿里云控制台搜索“SSL证书”,进入证书服务页面,选择“免费证书”并点击“创建证书”。创建完成后,在证书列表里点击“证书申请”,填上你的主域名,例如example.com,如果网站同时支持www.example.com,可以在申请时一并勾选。
验证方式默认是DNS验证。你需要按照提示在域名解析记录里添加一条TXT记录。DNS解析生效通常需要几分钟到几小时不等,验证通过后证书就会签发下来。整个过程大概十几分钟,基本可以做到当天申请当天部署。
提示:免费证书过期前一个月,控制台会提醒你续期。建议在手机日历里设个提醒,因为免费证书不像付费证书那样有自动续期服务。
2.3 下载证书时到底该选哪种服务器类型
证书签发后,在证书列表里找到“下载”按钮,会看到Nginx、Apache、IIS、Tomcat等多个选项。很多Apache用户在这个环节就迷糊了——其实选哪个不影响证书本身的效力,只是服务商帮你把证书文件转换成了对应服务器习惯的格式。
选Apache后下载,解压得到:
xxx_public.crt—— 服务器证书xxx_chain.crt—— 证书链(包含中间证书和根证书)
除了这两个文件,你还需要私钥xxx.key。这个文件在生成CSR时就有,如果你是在云服务商后台一键申请的,通常也能在证书详情里找到私钥的下载入口,或者它在申请时自动生成并保存在服务商那里。
2.4 备选方案:Let’s Encrypt免费证书
如果你不想每年手动申请和替换,Let's Encrypt的自动化方案值得一试。它提供的免费证书有效期为90天,但配合certbot或acme.sh工具,可以完全自动化续期,设置好cron定时任务
