在服务器或者ECS运维或者实际的部署、开发,可能涉及到ssl证书相关的问题,尤其前端有些能力(摄像头、webrtc)等需要在安全的上下文才能使用,cookie的跨iframe生效也需要。关于如何生成和部署证书,很多文字都有介绍,本文只做简单的介绍,但额外加了tls证书测试,便于测试部署的证书是否生效,以免调试时定位不到问题
1. SSL证书的生成
1.1 使用OpenSSL生成自签名证书
生成私钥:
openssl genrsa -out server.key 2048
生成证书签名请求(CSR):
openssl req -new -key server.key -out server.csr
生成自签名证书:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
1.2 获取受信任的CA颁发的证书
- 生成CSR(如上所示)
- 将CSR提交给CA(如Let's Encrypt、DigiCert等)
- 按照CA的指示完成验证步骤
- 下载颁发的证书文件
2. 使SSL证书生效
2.1 Apache服务器
- 编辑Apache配置文件(通常是
/etc/apache2/sites-available/default-ssl.conf
) - 添加或修改以下行:
SSLEngine on SSLCertificateFile /path/to/your/server.crt SSLCertificateKeyFile /path/to/your/server.key
- 重启Apache:
sudo service apache2 restart
2.2 Nginx服务器
- 编辑Nginx配置文件(通常在
/etc/nginx/sites-available/
目录下) - 在server块中添加以下内容:
listen 443 ssl; ssl_certificate /path/to/your/server.crt; ssl_certificate_key /path/to/your/server.key;
- 重新加载Nginx配置:
sudo nginx -s reload
3. SSL证书问题定位
3.1 测试是否有证书
- 使用OpenSSL:
此命令将显示证书信息,如果有的话:如下图所示,可看到证书指纹等信息,尤其是自签名,如果不小心弄了多个证书又不知道哪个有效的话,就可以进一步分析了openssl s_client -connect your_domain.com:443
如果是没有证书或不支持的,则会报错如下:可以看到客户证书没安装,目标网络位置也不支持
- 使用在线SSL检查工具,如SSL Labs(https://www.ssllabs.com/ssltest/)
3.2 定位证书位置
Apache:
- 查看Apache配置文件中的
SSLCertificateFile
和SSLCertificateKeyFile
指令
- 查看Apache配置文件中的
Nginx:
- 查看Nginx配置文件中的
ssl_certificate
和ssl_certificate_key
指令
- 查看Nginx配置文件中的
常见的证书存储位置:
/etc/ssl/certs/
/etc/pki/tls/certs/
/etc/apache2/ssl/
/etc/nginx/ssl/
- Windows server:
专门的证书管理工具,可查看个人证书等,有时候需要将证书放到受信任的根证书机构下*
3.3 常见问题及解决方法
证书过期
- 使用
openssl x509 -in server.crt -noout -dates
检查有效期 - 及时续期或重新申请证书
- 使用
证书链不完整
- 确保包含了所有中间证书
- 在配置文件中正确设置证书链文件
私钥和证书不匹配
- 使用
openssl x509 -noout -modulus -in server.crt | openssl md5
和openssl rsa -noout -modulus -in server.key | openssl md5
比较输出是否一致
- 使用
配置文件路径错误
- 仔细检查配置文件中的证书和私钥路径是否正确
权限问题
- 确保Web服务器进程有权限读取证书和私钥文件
记住,处理SSL证书时要格外小心,确保私钥的安全性,并遵循最佳实践来保护你的服务器和用户数据。