1. 为什么需要SSL证书
前几天帮同事排查一个HTTPS访问问题,发现他们测试环境用的还是HTTP协议。现代浏览器对非HTTPS网站越来越不友好,不仅会显示"不安全"警告,某些新特性API也直接禁用。这让我意识到很多开发者对SSL证书配置还存在认知盲区。
SSL证书的核心作用有三个:加密传输数据、验证服务器身份、确保数据完整性。没有它,你的网站就像在裸奔,所有流量都是明文传输,中间人随时可以窃听或篡改内容。Chrome从2017年开始就把HTTP页面标记为"不安全",现在更是直接阻止混合内容加载。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 证书生成方案选型
2.1 自签名证书 vs CA签发证书
自签名证书适合:
- 内网测试环境
- 开发调试
- 需要快速验证HTTPS功能的场景
CA签发证书适合:
- 生产环境
- 需要浏览器默认信任的场合
- 商业网站
重要提示:自签名证书需要手动导入到系统信任库,否则浏览器会显示安全警告。而Let's Encrypt等免费CA签发的证书会被主流浏览器自动信任。
2.2 OpenSSL vs Certbot工具链
OpenSSL是底层加密库,直接使用需要熟悉各种参数:
bash复制openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout example.key -out example.crt
Certbot是自动化工具,适合新手:
bash复制sudo certbot --nginx -d example.com
3. OpenSSL生成证书实操
3.1 生成私钥和CSR
首先生成2048位的RSA私钥:
bash复制openssl genrsa -out example.key 2048
然后用这个私钥生成证书签名请求(CSR):
bash复制openssl req -new -key example.key -out example.csr
这里会交互式询问国家、组织等信息,Common Name要填写你的域名。
3.2 自签名证书生成
对于测试环境,可以直接生成自签名证书:
bash复制openssl x509 -req -days 365 -in example.csr \
-signkey example.key -out example.crt
生成的三个关键文件:
- example.key:私钥文件,必须严格保密
- example.csr:证书签名请求文件
- example.crt:最终证书文件
4. Nginx配置HTTPS
4.1 基础配置模板
nginx复制server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/example.crt;
ssl_certificate_key /path/to/example.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
lo
