https证书怎么生成?申请免费https证书流程
- 云服务器
- 2026-07-10
- 4
HTTPS 证书是保障网站数据传输安全的核心组件,它通过非对称加密技术建立加密通道,防止数据在传输过程中被窃听或改动,生成 HTTPS 证书的过程通常涉及密钥对生成、证书签名请求(CSR)制作以及证书颁发机构(CA)签发等步骤,以下是详细的生成流程与分类解析。
证书生成的核心原理
在深入具体操作之前,理解其背后的逻辑至关重要,HTTPS 证书主要基于 PKI(公钥基础设施) 体系:
- 私钥(Private Key):由服务器持有,必须严格保密,用于解密发送给服务器的数据和签署数字签名。
- 公钥(Public Key):包含在证书中,公开给所有访问者,用于加密发送给服务器的数据和验证服务器的签名。
- 证书签名请求(CSR):包含公钥、域名信息、组织信息等,发送给 CA 进行签名。
- CA 签名:证书颁发机构使用其根证书的私钥对 CSR 进行签名,生成最终的证书文件。
证书类型与选择
在生成证书前,需根据业务需求选择合适的证书类型:
| 证书类型 | 验证级别 | 适用场景 | 生成难度/成本 |
|---|---|---|---|
| DV (Domain Validation) | 仅验证域名所有权 | 个人博客、小型网站、测试环境 | 低 / 免费或低成本 |
| OV (Organization Validation) | 验证域名及组织真实性 | 企业官网、电商平台 | 中 / 付费 |
| EV (Extended Validation) | 严格验证组织身份 | 银行、金融机构、高信任度需求 | 高 / 高成本 |
| 自签名证书 | 无第三方验证 | 内部测试、开发环境、内网服务 | 零 / 免费 |
详细生成步骤(以 OpenSSL 为例)
OpenSSL 是 Linux/Unix 环境下最常用的工具,Windows 用户也可通过 WSL 或 Git Bash 使用。
生成私钥
需要在服务器上生成一个私钥文件,推荐使用 RSA 2048 位或更高强度的密钥。
# 生成 RSA 私钥,密码保护(可选,生产环境建议移除密码以便自动加载) openssl genrsa -des3 -out server.key 2048
注:若希望服务器启动时无需输入密码,可去掉 -des3 参数。
生成证书签名请求(CSR)
CSR 文件包含了你的公钥和身份信息,需要提交给 CA 或用于自签名。

填写信息示例:
- Country Name (2 letter code): CN
- State or Province Name: Beijing
- Locality Name: Haidian
- Organization Name: MyCompany
- Organizational Unit Name: IT Dept
- Common Name (e.g. server FQDN or YOUR name): www.example.com (必须与域名完全一致)
- Email Address: admin@example.com
签发证书
根据是否使用 CA 机构,分为两种情况:
情况 A:自签名证书(用于测试)
直接利用私钥和 CSR 生成证书,浏览器会提示不安全,但功能正常。
# 生成有效期为 365 天的自签名证书 openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
情况 B:向 CA 申请证书(用于生产)
- 将生成的 server.csr 文件内容复制并提交给 CA 机构(如 Let’s Encrypt, DigiCert, 阿里云等)。
- CA 验证通过后,会返回签好的证书文件(通常为 .crt 或 .pem 格式)。
- 有时 CA 还会提供中间证书(Intermediate Certificates),需将其与服务器证书合并,以便客户端验证信任链。
自动化生成:Let’s Encrypt 与 Certbot
在生产环境中,手动生成证书繁琐且难以维护,推荐使用 Certbot 自动化工具,它免费、安全且能自动续期。

-
安装 Certbot:
sudo apt-get update sudo apt-get install certbot python3-certbot-nginx # Nginx 用户 # 或 sudo apt-get install certbot python3-certbot-apache # Apache 用户 -
自动获取并配置证书:
# 自动检测 Web 服务器并获取证书 sudo certbot --nginx -d example.com -d www.example.comCertbot 会自动完成域名验证、证书生成、Web 服务器配置修改以及设置自动续期任务。
证书部署与验证
生成证书后,需将其部署到 Web 服务器(Nginx/Apache/IIS)中。
Nginx 配置示例:

server { listen 443 ssl; server_name example.com; # 指定证书和私钥路径 ssl_certificate /etc/ssl/certs/server.crt; ssl_certificate_key /etc/ssl/private/server.key; # 推荐的安全配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; location / { root /usr/share/nginx/html; index index.html; } }
验证方法:
- 浏览器检查:访问 https://example.com,查看地址栏是否显示锁形图标。
- 命令行检查: openssl s_client -connect example.com:443 -servername example.com
查看输出中是否有 Verify return code: 0 (ok)。
常见问题与解答
Q1: 为什么我的 HTTPS 证书在浏览器中显示“不安全”或“证书无效”?
A: 这通常由以下原因导致:
- 域名不匹配:证书中的 Common Name (CN) 或 Subject Alternative Name (SAN) 与实际访问的域名不一致,证书是为 www.example.com 签发的,但访问的是 example.com(除非证书包含 SAN 扩展)。
- 证书过期:检查证书的有效期,自签名证书通常有效期较短,CA 证书需确保持续续期。
- 信任链不完整:如果是 OV/EV 证书,可能缺少中间证书(Intermediate CA),需要将 CA 提供的根证书和中间证书按顺序合并到一个 .crt 文件中。
- :页面中虽然使用了 HTTPS,但加载了 HTTP 协议的图片、脚本或样式表,部分浏览器会标记为“部分安全”或警告。
Q2: 自签名证书能否用于生产环境?有什么风险?
A: 强烈不建议将自签名证书用于面向公众的生产环境。
- 安全风险:用户浏览器会弹出红色警告,用户极易忽略或误操作,导致中间人攻破(MITM)风险增加。
- SEO 影响:搜索引擎(如 Google)会对 HTTPS 网站进行排名加权,但自签名证书可能导致爬虫无法正确抓取或降低信任度。
- 移动端兼容性问题:许多移动应用(App)内置了严格的证书校验,自签名证书会导致 App 无法连接后端服务。
- 替代方案:对于内部系统或测试环境,可以将自签名证书的根证书导入到客户端设备的“受信任的根证书颁发机构”存储中,但这需要手动管理,维护成本高,生产环境应始终使用受信任的 CA 签发的证书(如 Let’s Encrypt)。