如何在centos7.9上生成web的ssl证书和密钥,详细介绍每个步骤的命令和参数

253 阅读6分钟

在CentOS 7.9上生成Web SSL证书和密钥的详细指南

在CentOS 7.9上生成SSL证书和密钥可以通过OpenSSL工具完成。以下是详细的步骤说明:

  1. 安装OpenSSL 首先确保系统已安装OpenSSL:
sudo yum install openssl -y

检查安装版本:

openssl version
  1. 创建证书目录结构
sudo mkdir -p /etc/ssl/{certs,private}
sudo chmod -R 700 /etc/ssl/private
  1. 生成私钥

方法一:生成RSA私钥(2048位)

sudo openssl genrsa -out /etc/ssl/private/server.key 2048

参数说明:

genrsa - 生成RSA密钥

-out - 指定输出文件

2048 - 密钥位数(推荐至少2048位)

方法二:生成更安全的ECDSA私钥

sudo openssl ecparam -genkey -name secp384r1 -out /etc/ssl/private/server.key

参数说明: ecparam - 处理椭圆曲线参数

-genkey - 生成密钥

-name secp384r1 - 指定椭圆曲线名称

  1. 生成证书签名请求(CSR)
sudo openssl req -new -key /etc/ssl/private/server.key -out /etc/ssl/certs/server.csr

系统会提示输入以下信息:

Country Name (2 letter code) [XX]: CN
State or Province Name (full name) []: Beijing
Locality Name (eg, city) [Default City]: Beijing
Organization Name (eg, company) [Default Company Ltd]: YourCompany
Organizational Unit Name (eg, section) []: IT
Common Name (eg, your name or your server's hostname) []: yourdomain.com
Email Address []: admin@yourdomain.com
A challenge password []: (直接回车不设置)
An optional company name []: (直接回车不设置)

参数说明: req - 创建证书请求

-new - 新建请求

-key - 指定私钥文件

-out - 指定输出文件

  1. 生成自签名证书 对于测试环境,可以生成自签名证书:
sudo openssl x509 -req -days 365 -in /etc/ssl/certs/server.csr -signkey /etc/ssl/private/server.key -out /etc/ssl/certs/server.crt

参数说明: x509 - 指定X.509证书格式

-req - 输入是证书请求

-days 365 - 证书有效期(天)

-in - 输入CSR文件

-signkey - 自签名使用的私钥

-out - 输出证书文件

  1. (可选)生成更安全的证书配置

创建配置文件/etc/ssl/openssl.cnf:

sudo tee /etc/ssl/openssl.cnf <<'EOF
[ req ]
default_bits        = 2048
default_keyfile     = server-key.pem
distinguished_name  = subject
req_extensions      = req_ext
x509_extensions     = x509_ext
string_mask         = utf8only

[ subject ]
countryName         = Country Name (2 letter code)
countryName_default     = CN

stateOrProvinceName     = State or Province Name (full name)
stateOrProvinceName_default = Beijing

localityName            = Locality Name (eg, city)
localityName_default    = Beijing

organizationName         = Organization Name (eg, company)
organizationName_default = YourCompany

commonName          = Common Name (e.g. server FQDN or YOUR name)
commonName_default      = yourdomain.com

emailAddress            = Email Address
emailAddress_default        = admin@yourdomain.com

[ x509_ext ]
subjectKeyIdentifier        = hash
authorityKeyIdentifier    = keyid,issuer
basicConstraints        = CA:FALSE
keyUsage            = digitalSignature, keyEncipherment
subjectAltName          = @alternate_names
nsComment           = "OpenSSL Generated Certificate"

[ req_ext ]
subjectKeyIdentifier        = hash
basicConstraints        = CA:FALSE
keyUsage            = digitalSignature, keyEncipherment
subjectAltName          = @alternate_names
nsComment           = "OpenSSL Generated Certificate"

[ alternate_names ]
DNS.1       = yourdomain.com
DNS.2       = www.yourdomain.com
DNS.3       = mail.yourdomain.com
EOF

然后使用配置文件生成证书:

sudo openssl req -config /etc/ssl/openssl.cnf -new -x509 -sha256 -newkey rsa:2048 -nodes -keyout /etc/ssl/private/server.key -days 365 -out /etc/ssl/certs/server.crt
  1. 设置文件权限
sudo chmod 600 /etc/ssl/private/server.key
sudo chmod 644 /etc/ssl/certs/server.crt
  1. 验证证书
openssl x509 -in /etc/ssl/certs/server.crt -text -noout
  1. (可选)生成PEM格式证书 某些应用需要PEM格式:
sudo cat /etc/ssl/certs/server.crt /etc/ssl/private/server.key > /etc/ssl/certs/server.pem

使用Let's Encrypt获取免费证书(生产环境推荐) 对于生产环境,建议使用Let's Encrypt免费证书:

安装certbot:

sudo yum install epel-release -y
sudo yum install certbot -y

获取证书(webroot方式):

sudo certbot certonly --webroot -w /var/www/html -d yourdomain.com -d www.yourdomain.com

自动续期测试:

sudo certbot renew --dry-run

Let's Encrypt证书每90天需要续期,可以设置cron任务自动续期。

详细介绍certbot -d *.baidu.com --manual --config-dir config --work-dir data --preferred-challenges dns certonly命令的作用和用到的参数和选项

这个 certbot 命令用于申请 通配符证书(Wildcard SSL Certificate)(*.baidu.com),并使用 DNS 手动验证(Manual DNS Challenge) 方式。下面详细解析这个命令的每个部分:

命令解析

certbot -d *.baidu.com --manual --config-dir config --work-dir data --preferred-challenges dns certonly

参数/选项 作用 详细说明

certbot	Certbot 主命令	Let's Encrypt 的官方客户端工具
-d *.baidu.com	指定域名	申请 *.baidu.com 的通配符证书(适用于所有子域名)
--manual	手动模式	需要手动完成验证(DNS 或 HTTP 验证)
--config-dir config	指定配置目录	存放 Certbot 配置文件的目录(默认 /etc/letsencrypt)
--work-dir data	指定工作目录	存放 Certbot 运行时数据的目录(默认 /var/lib/letsencrypt)
--preferred-challenges dns	优先使用 DNS 验证	要求使用 DNS 方式验证域名所有权
certonly	仅获取证书,不自动安装	只生成证书,不修改 Web 服务器配置

关键参数详解

  1. -d .baidu.com(申请通配符证书) 通配符证书(.baidu.com)可以保护所有子域名(如 www.baidu.com、api.baidu.com)。

Let's Encrypt 通配符证书必须使用 DNS 验证(--preferred-challenges dns),不能使用 HTTP 验证。

  1. --manual(手动模式) 不会自动完成验证,而是提示你手动操作:

如果是 --preferred-challenges dns,会要求你添加 TXT 记录 到 DNS 解析。

如果是 --preferred-challenges http,会要求你在网站根目录放置验证文件。

适用于:

服务器无法自动配置 DNS(如 Cloudflare、阿里云 DNS 需要手动操作)。

自动化脚本无法访问 DNS 管理 API 的情况。

  1. --preferred-challenges dns(DNS 验证)

DNS 验证流程:

Certbot 会生成一个随机的 TXT 记录(如 _acme-challenge.baidu.com)。

你需要手动在 DNS 管理界面添加这条记录。

Certbot 会查询 DNS,确认记录存在后颁发证书。

适用场景:

通配符证书(*.example.com)必须使用 DNS 验证。

服务器没有开放 80/443 端口(无法使用 HTTP 验证)。

  1. --config-dir 和 --work-dir(自定义目录) 默认路径:

配置文件:/etc/letsencrypt

工作数据:/var/lib/letsencrypt

日志:/var/log/letsencrypt

自定义路径(如 --config-dir config --work-dir data):

适用于测试环境,避免影响系统默认配置。

证书文件会存放在 config/live/baidu.com/ 下。

  1. certonly(仅获取证书) 仅生成证书,不会自动配置 Nginx/Apache。

适用场景:

你希望手动部署证书。

使用非标准 Web 服务器(如 HAProxy、Caddy)。

测试环境,避免影响生产配置。

完整申请流程示例

  1. 运行命令
certbot -d *.baidu.com --manual --config-dir config --work-dir data --preferred-challenges dns certonly
  1. Certbot 会提示
Please deploy a DNS TXT record under the name:
_acme-challenge.baidu.com
with the following value:
Xsdfk234jklJKL34jkL3k4jKL34kLJ34

Before continuing, verify the record is deployed.
Press Enter to Continue
  1. 手动添加 DNS TXT 记录 登录你的 DNS 管理平台(如 Cloudflare、阿里云 DNS)。

添加一条 TXT 记录:

主机名:_acme-challenge.baidu.com

记录值:Xsdfk234jklJKL34jkL3k4jKL34kLJ34(Certbot 提供的随机值)

等待 DNS 生效(可用 dig TXT _acme-challenge.baidu.com 测试)。

  1. 按 Enter 继续 Certbot 会检查 DNS 记录,验证成功后生成证书:

Successfully received certificate.

Certificate is saved at: config/live/baidu.com/fullchain.pem

Key is saved at: config/live/baidu.com/privkey.pem

总结

--manual --preferred-challenges dns:适用于通配符证书,需手动添加 DNS TXT 记录。

-d *.baidu.com:申请 *.baidu.com 的通配符证书。

--config-dir 和 --work-dir:自定义配置目录,避免影响默认路径。

certonly:仅生成证书,不自动配置 Web 服务器。

如果是生产环境,建议使用 自动化 DNS API(如 Cloudflare、阿里云 DNS 插件)替代 --manual,以实现自动续期。