文档中心
SSL鑷鍙戣瘉涔︿綔鎴愭寚鍗楁墜鎶婃墜鏁欎綘鎵撻€犱笓灞炲姞瀵嗗嚟璇?txt
时间 : 2025-09-27 16:37:49浏览量 : 2
什么是SSL自签发证书?

SSL自签发证书(Self-Signed Certificate)就像你自己制作的一张"身份证",而不是由公安局(权威CA机构)颁发的。它同样能实现数据加密传输,但因为缺乏第三方权威认证,浏览器会显示"不安全"警告。
举个例子:你开了一家小店,自己手写了一个"营业执照"贴在门口——这就是自签名证书。而正规CA颁发的证书好比工商局核发的营业执照,大家都认可。
为什么要使用自签发证书?
虽然比不上收费证书权威,但在以下场景非常实用:
1. 内部测试环境:开发团队在测试支付功能时
2. 局域网应用:公司内部OA系统、NAS存储
3. 物联网设备:智能家居设备的初始配置
4. 学习研究:理解SSL/TLS工作原理的最佳实践
我曾为一个客户部署内网监控系统时,使用自签名证书既保证了管理员登录时的加密安全,又省去了购买证书的费用。
OpenSSL创建自签名证书全流程
基础环境准备
首先确保系统安装了OpenSSL工具:
```bash
Ubuntu/Debian
sudo apt-get install openssl
CentOS/RHEL
sudo yum install openssl
```
生成私钥(RSA 2048位)
私钥就像保险箱的钥匙:
openssl genrsa -out server.key 2048
这会产生一个2048位的RSA私钥文件server.key。位数越高越安全但性能开销越大,2048位是当前平衡点。
创建CSR(证书签名请求)
CSR好比是证书的"申请表":
openssl req -new -key server.key -out server.csr
执行后会交互式询问信息:
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Beijing
Locality Name (eg, city) []:Beijing
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company Ltd.
Organizational Unit Name (eg, section) []:IT Dept
Common Name (e.g. server FQDN or YOUR name) []:mysite.localhost
Email Address []:admin@example.com
特别注意:
- Common Name(CN)必须匹配实际访问的域名/IP
- 内部使用时可以用.localhost等保留域名
生成自签名证书
最后一步"自我认证":
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
这会生成有效期365天的server.crt文件。生产环境建议不超过397天(苹果要求)。
Nginx配置示例
有了cert和key后,配置Nginx:
```nginx
server {
listen 443 ssl;
server_name mysite.localhost;
ssl_certificate /path/to/server.crt;
ssl_certificate_key /path/to/server.key;
增强安全性配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384...';
ssl_prefer_server_ciphers on;
}
解决浏览器警告问题
访问时会看到类似这样的警告:

解决方案A:手动添加例外
1. Chrome中点击"高级"
2. 选择"继续前往网站(不安全)"
适用于临时测试场景。
解决方案B:导入为信任根证书(适合内网)
Windows系统:
1. 双击.crt文件 → "安装证书"
2. 选择"本地计算机" → "将所有证书放入下列存储"
3. 选择"受信任的根证书颁发机构"
Linux(CentOS):
sudo cp server.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust extract`
MacOS:
sudo security add-trusted-cert -d -r trustRoot \
-k /Library/Keychains/System.keychain server.crt`
PKI体系下的风险提示
虽然方便但需注意:
1. 中间人攻击风险:没有CA验证身份真实性
→ MITM攻击者可以伪造相同CN的证书
*案例:某企业内网钓鱼攻击利用自签名证书记录键盘输入*
2. 密钥管理问题:
→ private.key若泄露等同于门禁卡被复制
*最佳实践*:设置400权限 `chmod 400 server.key`
3. 缺乏吊销机制:
→ CA签发的证书可CRL/OCSP吊销
→ 自签名的只能等过期或更换全部密钥对
ACME自动化方案进阶
对于需要大量部署的场景,推荐使用:
- `mkcert`工具(自动生成本地信任的证书)
- OpenVPN的easy-rsa脚本集
- HashiCorp Vault的PKI引擎
例如用mkcert三步完成:
```bash
brew install mkcert
安装
mkcert -install
安装本地CA
mkcert example.com "*.example.com"
泛域名+主域名
SSL/TLS检测工具推荐
部署后建议验证:
1. Qualys SSL Labs测试:
```bash
curl https://api.ssllabs.com/api/v3/***yze?host=yourdomain.com
```
2. OpenSSL客户端测试:
openssl s_client -connect localhost:443 -servername yourdomain.com | openssl x509 -text
3. cipherscan检测支持的加密套件:
./cipherscan yourdomain.com:443
FAQ常见问题解答
Q:为什么Chrome说我的连接不是私密连接?
A:这是正常现象,因为缺少CA认证。需手动添加信任或使用企业PKI体系分发根证。
Q:如何查看我的SAN扩展信息?
A:执行命令查看完整信息:
openssl x509 -in cert.pem -text | grep DNS:
Q:有效期可以设置10年吗?
A:技术上可以但不推荐。主流浏览器已限制最大398天有效期。
通过本文您应该已经掌握从零创建到实际部署的全流程。记住关键原则:"公网用CA、内网可自签、密钥严保管"。对于业务关键系统,建议还是投资购买受信任的商业SSL/TLS证书。
TAG:ssl自签发证书作成,ssl self signed certificate,自己做ssl证书,自制ssl证书无效,自己签发ssl证书,自签ssl证书变为可信任