在运维或者实际的部署、开发,可能涉及到ssl证书相关的问题,尤其前端有些能力(摄像头、webrtc)等需要在安全的上下文才能使用,cookie的跨iframe生效也需要。关于如何生成和部署证书,很多文字都有介绍,本文只做简单的介绍,但额外加了tls证书测试,便于测试部署的证书是否生效,以免调试时定位不到问题
1. SSL证书的生成
1.1 使用OpenSSL生成自签名证书
-  生成私钥: openssl genrsa -out server.key 2048- 1
 
-  生成证书签名请求(CSR): openssl req -new -key server.key -out server.csr- 1
 
-  生成自签名证书: openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt- 1
 
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- 1
- 2
- 3
 
- 重启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;- 1
- 2
- 3
 
- 重新加载Nginx配置:sudo nginx -s reload
3. SSL证书问题定位
3.1 测试是否有证书
-  使用OpenSSL: openssl s_client -connect your_domain.com:443- 1
 此命令将显示证书信息,如果有的话:如下图所示,可看到证书指纹等信息,尤其是自签名,如果不小心弄了多个证书又不知道哪个有效的话,就可以进一步分析了 
  
 如果是没有证书或不支持的,则会报错如下:可以看到客户证书没安装,目标网络位置也不支持
  
-  使用在线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证书时要格外小心,确保私钥的安全性,并遵循最佳实践来保护你的服务器和用户数据。
希望看完有所收获,中秋节快乐啊!
 
                                    
评论记录:
回复评论: