Skip to content

SSL证书申请

为网站配置HTTPS需要SSL证书,本节介绍如何申请SSL证书。

证书类型

免费证书

  • Let's Encrypt:免费、自动化、90天有效期
  • Cloudflare SSL:免费、灵活
  • ZeroSSL:免费、90天有效期

付费证书

  • DigiCert:企业级、高信任度
  • Comodo:性价比高
  • GlobalSign:国际知名

Let's Encrypt证书

安装Certbot

Ubuntu/Debian

bash
sudo apt update
sudo apt install certbot

CentOS/RHEL

bash
sudo yum install epel-release
sudo yum install certbot

申请证书

单域名

bash
sudo certbot certonly --standalone -d example.com

多域名

bash
sudo certbot certonly --standalone -d example.com -d www.example.com

通配符域名

bash
sudo certbot certonly --manual --preferred-challenges dns -d "*.example.com"

证书位置

/etc/letsencrypt/live/example.com/
├── cert.pem       # 证书
├── chain.pem     # 证书链
├── fullchain.pem # 完整证书链
└── privkey.pem   # 私钥

Cloudflare SSL证书

创建证书

  1. 登录Cloudflare控制台
  2. 选择域名
  3. SSL/TLS → Origin Server
  4. Create Certificate
  5. 下载证书和私钥

证书格式

  • 证书:origin.crt
  • 私钥:origin.key

自签名证书

生成自签名证书

bash
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/nginx/ssl/selfsigned.key \
  -out /etc/nginx/ssl/selfsigned.crt

生成CSR

bash
openssl req -new -newkey rsa:2048 -nodes \
  -keyout /etc/nginx/ssl/example.com.key \
  -out /etc/nginx/ssl/example.com.csr

证书验证

查看证书信息

bash
openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -text -noout

查看证书有效期

bash
openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -noout -dates

验证证书链

bash
openssl s_client -connect example.com:443 -showcerts

证书续期

Let's Encrypt自动续期

测试续期

bash
sudo certbot renew --dry-run

手动续期

bash
sudo certbot renew

自动续期

bash
sudo crontab -e

添加以下内容:

0 0 * * * certbot renew --quiet

证书安装

复制证书文件

bash
sudo mkdir -p /etc/nginx/ssl
sudo cp /etc/letsencrypt/live/example.com/fullchain.pem /etc/nginx/ssl/example.com.crt
sudo cp /etc/letsencrypt/live/example.com/privkey.pem /etc/nginx/ssl/example.com.key

设置权限

bash
sudo chmod 644 /etc/nginx/ssl/example.com.crt
sudo chmod 600 /etc/nginx/ssl/example.com.key

常见问题

DNS验证失败

原因: DNS记录未正确配置

解决: 检查DNS记录

bash
dig example.com

端口被占用

原因: 80端口被占用

解决: 停止占用80端口的程序

bash
sudo netstat -tlnp | grep :80

证书申请失败

原因: 域名未正确解析

解决: 检查域名解析

bash
nslookup example.com

总结

SSL证书申请的关键点:

  • Let's Encrypt:免费、自动化
  • Cloudflare:免费、灵活
  • 自签名:测试环境
  • 证书续期:定期续期
  • 证书验证:检查证书信息

选择合适的证书类型,为网站配置HTTPS。