文档中心
LinuxSSL璇佷功璇﹁В浠庡師鐞嗗埌瀹炴垬閰嶇疆鎸囧崡
时间 : 2025-09-27 16:23:32浏览量 : 1
一、SSL证书到底是什么?

想象一下你要给朋友寄一封重要信件,SSL证书就像是一个防拆封的特殊信封和印章组合。在Linux系统中,它用来确保服务器和客户端之间的通信安全。
SSL证书主要包含三个关键部分:
1. 公钥 - 就像信箱的投递口,任何人都可以往里面放信
2. 私钥 - 只有主人拥有的钥匙,用来打开信箱取信
3. 数字签名 - CA机构(证书颁发机构)的防伪标记,证明这个信箱确实是你的
举个实际例子:当你在浏览器访问https://www.example.com时:
- 浏览器会问:"请证明你是真的example.com"
- 服务器就出示它的SSL证书
- 浏览器检查证书是否由可信CA签发,是否在有效期内
- 验证通过后,才会建立加密连接
二、Linux中常见的证书文件格式
Linux世界里主要有三种"包装形式"的证书:
1. PEM格式 (.pem, .crt, .key)
```bash
--BEGIN CERTIFICATE--
MIIDXTCCAkWgAwIBAgIJAN...
--END CERTIFICATE--
```
这是最常用的文本格式,可以直接用cat查看内容。Apache/Nginx都爱吃这种"家常菜"。
2. DER格式 (.der)
二进制格式的证书,Windows系统偏爱这种。就像压缩过的.zip文件,人类看不懂但机器处理快。
3. PKCS12
(.pfx, .p12)
把证书、私钥和中间证书打包成一个带密码的文件。就像把身份证、银行卡和密码锁在一个保险箱里。Java应用常用这种格式。
转换示例(使用OpenSSL):
PEM转DER
openssl x509 -in cert.pem -outform der -out cert.der
DER转PEM
openssl x509 -inform der -in cert.der -out cert.pem
PEM打包为PKCS12
openssl pkcs12 -export -inkey key.pem -in cert.pem -out bundle.p12
三、手把手教你在Linux配置SSL证书
Apache配置实例
假设我们已经有了:
- 域名:example.com
- 证书文件:/etc/ssl/certs/example.crt
- 私钥文件:/etc/ssl/private/example.key
修改Apache配置(通常位于/etc/apache2/sites-available/):
```apacheconf
ServerName example.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/example.crt
SSLCertificateKeyFile /etc/ssl/private/example.key
中间证书(如果需要)
SSLCertificateChainFile /etc/ssl/certs/intermediate.crt
强制HTTPS重定向(可选)
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Nginx配置实例
Nginx配置更简洁:
```nginx
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/certs/example.crt;
ssl_certificate_key /etc/ssl/private/example.key;
TLS协议版本控制(安全加固)
ssl_protocols TLSv1.2 TLSv1.3;
SSL会话缓存优化性能
ssl_session_cache shared:SSL:10m;
}
四、高级技巧与常见问题排查
Let's Encrypt免费证书实战
Certbot工具让获取免费SSL变得简单:
Ubuntu安装certbot
sudo apt install certbot python3-certbot-apache
获取并自动配置证书(Apache版)
sudo certbot --apache -d example.com -d www.example.com
Nginx版命令类似:
sudo certbot --nginx -d yourdomain.com
OpenSSL诊断命令大全
当出现问题时,这些命令就是你的听诊器:
1. 检查证书有效期
```bash
openssl x509 -noout -dates -in certificate.crt
输出示例:
notBefore=Jun 1 00:00:00 2025 GMT
notAfter=May 31 23:59:59 2025 GMT
2. 验证私钥与证书是否匹配
openssl x509 -noout -modulus -in certificate.crt | openssl md5
openssl rsa -noout -modulus -in private.key | openssl md5
如果两个MD5值相同,说明匹配成功。
3. 测试HTTPS连接
openssl s_client connect example.com:443 | openssl x509 noout subject issuer dates
HTTPS混合内容问题解决
即使部署了SSL,如果网页中引用了http://的资源(图片、JS等),浏览器仍会显示"不安全"。解决方法:
1. Chrome开发者工具 → Security面板会列出所有非HTTPS资源
2. WordPress用户可以在wp-config.php添加:
```php
define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);
3. Nginx全局替换:
```nginx
sub_filter 'http://' 'https://';
sub_filter_once off;
五、安全加固建议(企业级最佳实践)
1. 禁用老旧协议
在Nginx中明确禁用不安全的旧协议:
ssl_protocols TLSv1.2 TLSv1.3;
禁用TLS1.0和TLS1.1
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384...';
使用现代加密套件
2.HSTS头强化
告诉浏览器必须使用HTTPS:
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
3.定期轮换密钥
即使没有泄露也应定期更换密钥(如每年一次):
openssl req newkey rsa:4096 keyout new.key out new.csr
然后向CA重新申请签发新证书记得吊销旧证书记得吊销旧证书记得吊销旧证书记得吊销旧证书记得吊销旧证书记得吊销旧证书记得吊销旧证书记得吊销旧证书记得吊销旧证书记得吊销旧证书记得吊销旧证书记得吊销旧证书记得吊销旧证书记得吊销旧证书记得吊销旧证件件件件件件件件件件件件
TAG:linux ssl证书详解,linux openssl制作ssl证书,linux查看ssl证书,linux ssl版本,linux制作ssl证书