原创

自签名SSL证书生成指南

温馨提示:
本文最后更新于 2025年05月22日,已超过 259 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

 

一、概述

1. 简介

SSL 证书(Secure Sockets Layer Certificate),现多称为 TLS 证书(Transport Layer Security Certificate),是一种由受信任的证书颁发机构(CA)签发的数字凭证,用于在客户端(如浏览器、App)与服务器之间建立加密通信通道,并验证服务器身份,从而保障数据传输的机密性、完整性与真实性。

工作流程简述:

  1. 用户访问 https://example.com
  2. 服务器将 SSL/TLS 证书发送给客户端;
  3. 客户端(浏览器)验证证书:
    • 是否由可信 CA 签发;
    • 域名是否匹配;
    • 是否在有效期内;
  1. 验证通过后,双方通过密钥交换算法(如 ECDHE)协商生成会话密钥
  2. 后续所有通信均使用该会话密钥进行对称加密传输,确保高效与安全。

2. 核心作用

作用

说明

1. 数据加密保护(核心功能)

TLS 对传输数据进行端到端加密,防止窃听和中间人攻击(MITM)。即使数据被截获,攻击者也无法解密内容。对登录凭证、支付信息、个人隐私等敏感数据至关重要。

2. 身份验证(防伪冒)

证书由可信 CA 签发,浏览器验证其真实性。有效防止钓鱼网站冒充合法服务(如假冒银行、电商),确保用户连接的是真实目标服务器

3. 数据完整性保障

TLS 协议内置消息认证码(MAC)或 AEAD 加密模式,任何传输中被篡改的数据都会被接收方检测并丢弃,杜绝恶意注入或修改。

4. 满足合规与行业标准

PCI DSS:强制要求所有处理信用卡交易的网站启用 HTTPS;GDPR/HIPAA:要求对个人/健康数据进行加密传输;无有效 SSL 证书的站点无法通过合规审计,可能面临罚款或业务中断。

5. 提升用户体验与 SEO

现代浏览器(Chrome、Edge、Firefox)对 HTTP 网站标记为 “不安全”,显著降低用户信任与转化率;Google 明确将 HTTPS 作为搜索排名因素,部署 SSL 有助于提升 SEO 表现。

3.常见证书文件格式说明

后缀

类型

说明

.jks

密钥库

Java KeyStore 格式,包含私钥 + 公钥证书,仅限 Java 应用(如 Tomcat ≤10)。不跨平台,建议避免用于新项目。

.p12 / .pfx

密钥库

PKCS#12 标准格式,包含私钥 + 公钥证书 + CA 信任链,跨平台通用。

.p12 常用于 Linux/标准环境,.pfx 常用于 Windows,两者完全等价。

.crt / .cer

公钥证书

X.509 证书,通常为 PEM(Base64 文本)或 DER(二进制)格式。

用于客户端安装以建立信任。.crt 偏好 Linux,.cer 偏好 Windows,功能完全相同。

.key

私钥文件

通常为 PEM 格式的私钥文件,必须与对应证书配对使用。最高机密!文件权限应设为 600(仅所有者可读写)。

二、证书生成与转换

1.生成 JKS 证书(适用于 Tomcat ≤10)

生成服务端 JKS 密钥库(含私钥 + 自签名证书),添加 Subject Alternative Name(SAN),支持多域名/IP,现代浏览器强制要求 SAN。

keytool -genkeypair \
  -alias meeting \
  -keyalg RSA \
  -keysize 2048 \
  -validity 3660 \
  -keystore meeting.jks \
  -storepass '1234qwer' \
  -keypass '1234qwer' \
  -dname "CN=meeting.com, OU=IT Department, O=INFREE, L=Chengdu, ST=Sichuan, C=CN" \
  -ext san=dns:meeting.com,ip:192.168.1.55

从 JKS 导出公钥证书(供客户端信任)

keytool -exportcert \
  -alias meeting \
  -keystore meeting.jks \
  -file meeting.cer \
  -storepass '1234qwer' \
  -rfc

2.生成 PKCS#12 证书(推荐用于 Tomcat 8.5+)

生成私钥和证书签名请求

# 生成私钥
openssl genrsa -out meeting.key 2048

# 生成带 SAN 的自签名证书
openssl req -new -x509 \
  -key meeting.key \
  -out meeting.crt \
  -days 3660 \
  -subj "/C=CN/ST=Sichuan/L=Chengdu/O=INFREE/OU=IT Department/CN=meeting.com" \
  -addext "subjectAltName = DNS:meeting.com,IP:192.168.1.55"

打包为 PKCS#12 格式

openssl pkcs12 -export \
  -in meeting.crt \
  -inkey meeting.key \
  -out meeting.p12 \
  -name "meeting" \
  -passout pass:'P@ssw0rd'

3.客户端安装公钥证书(Windows)

目的:使系统/浏览器信任自签名证书,消除“不安全”警告。

操作步骤:

  1. 双击 meeting.cer 文件;
  2. 点击 “安装证书...”;
  3. 选择 “本地计算机” → 下一步;
  4. 选择 “将所有证书放入下列存储” → 点击 “浏览”;
  5. 选择 “受信任的根证书颁发机构” → 确定 → 完成;
  6. 若提示安全警告,确认导入;
  7. 重启浏览器,访问 https://meeting.com:8443 应显示安全锁图标

4.CRT转CER

PEM格式适用于现代系统(Windows 10/11、Linux、macOS),DER格式仅在目标设备明确要求二进制证书时使用(如老旧嵌入式系统)。

方法1:直接重命名

如果CRT文件是PEM格式(以-----BEGIN CERTIFICATE-----开头),可以直接修改文件扩展名:

mv certificate.crt certificate.cer

方法2:使用OpenSSL转换

如果CRT是DER格式,需要转换为PEM格式的CER:

openssl x509 -in meeting.crt -inform der -out meeting.cer -outform pem

5.PEM 转 PKCS#12

适用于 Let's Encrypt 等 PEM 证书源。.pem是编码格式,Base64 编码的文本格式,可封装:证书、私钥、CA 链等。安全性取决于内容:若含私钥,则需按私钥级别保护。

openssl pkcs12 -export \
  -in fullchain.pem \          # 包含服务器证书 + 中间CA
  -inkey privkey.pem \         # 私钥
  -out keystore.p12 \          # 输出 PKCS#12
  -name "tomcat" \             # 别名
  -passout pass:1234qwer       # 密码

三、SSL/TLS 协议版本与安全建议

1. 支持的 SSL/TLS 协议版本

协议版本

状态

说明

TLS 1.3

推荐

最新标准(RFC 8446),性能高、安全性强,无前向兼容风险。主流浏览器和服务器已广泛支持。

TLS 1.2

安全(当前主流)

广泛部署,支持现代加密套件(如 ECDHE、AES-GCM)。生产环境最低应启用此版本

TLS 1.1 / TLS 1.0

已弃用

存在已知漏洞(如 BEAST、POODLE),PCI DSS 等合规标准明确禁止使用

SSL 3.0 / SSL 2.0

禁用

严重安全缺陷,必须彻底禁用

最佳实践

  • 服务器配置应仅启用 TLS 1.2 和 TLS 1.3
  • 禁用弱加密套件(如 RC4、DES、MD5、SHA1);

四、其他

1.有效期

  • Chrome 浏览器:虽未硬性限制自签名证书有效期,但超过 10 年的证书可能触发更严厉的安全警告(如红色锁 + “您的连接不是私密连接”)。
  • 企业环境:部分安全策略、终端防护软件或浏览器扩展会主动拦截长期有效的自签名证书。
  • 最佳实践:自签名证书有效期建议 ≤ 2 年(730 天),便于定期轮换与安全管理。
正文到此结束