凌峰创科服务平台

Linux如何搭建CA服务器?

在Linux系统中搭建CA(证书颁发机构)服务器是保障网络安全的重要环节,主要用于签发和管理数字证书,为HTTPS、VPN、邮件加密等应用提供身份认证服务,以下将详细介绍基于Linux(以CentOS 7为例)使用OpenSSL搭建私有CA服务器的完整步骤,包括CA初始化、证书签发、吊销管理等核心操作。

环境准备与CA初始化

安装必要软件

CA服务器的核心依赖是OpenSSL,在CentOS 7中可通过以下命令安装:

yum install -y openssl openssl-devel

安装完成后,检查OpenSSL版本:

openssl version

确保版本不低于1.0.1(推荐1.1.x以上以支持更安全的加密算法)。

设计CA目录结构

为规范管理,需创建CA的专属目录和文件,结构如下:

/etc/pki/CA/
├── certs/          # 存储已签发的证书
├── crl/            # 存储证书吊销列表(CRL)
├── newcerts/       # 存储新签发的证书
├── private/        # 存储CA私钥
├── index.txt      # 证书颁发数据库(记录已签发证书)
└── serial         # 下一个证书的序列号(十六进制)

创建目录并设置权限:

mkdir -p /etc/pki/CA/{certs,crl,newcerts,private}
touch /etc/pki/CA/index.txt
echo "01" > /etc/pki/CA/serial
chmod 600 /etc/pki/CA/private/

生成CA私钥与自签名证书

CA的核心是私钥和自签名的根证书,私钥需严格保密(权限设为600),生成私钥(使用RSA 4096位加密):

openssl genpkey -algorithm RSA -out /etc/pki/CA/private/cakey.pem -aes256 -passout pass:YourPassword123

参数说明:

  • -aes256:私钥加密(需输入密码,防止泄露)
  • -passout pass:YourPassword123:直接指定私钥密码(避免交互)

接着生成CA自签名证书(有效期通常为10年):

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650 -passin pass:YourPassword123 -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCA/OU=IT/CN=root-ca.example.com"

参数说明:

  • -x509:直接生成自签名证书(非证书签名请求CSR)
  • -days 3650:证书有效期3650天(10年)
  • -subj:指定证书 subject 信息(国家、省份、组织等,需根据实际环境填写)

配置CA策略与签发证书

创建CA配置文件

OpenSSL默认配置文件为/etc/pki/tls/openssl.cnf,需修改或复制到CA目录并调整策略:

cp /etc/pki/tls/openssl.cnf /etc/pki/CA/openssl.cnf

编辑/etc/pki/CA/openssl.cnf,重点修改以下部分:

  • [ CA_default ]段落:
    [ CA_default ]
    dir               = /etc/pki/CA           # CA工作目录
    certs             = $dir/certs           # 证书存放目录
    crl_dir           = $dir/crl             # CRL存放目录
    database          = $dir/index.txt      # 证书数据库
    new_certs_dir     = $dir/newcerts        # 新签发证书目录
    certificate       = $dir/cacert.pem      # CA证书文件
    serial            = $dir/serial          # 序列号文件
    private_key       = $dir/private/cakey.pem # CA私钥
    RANDFILE          = $dir/private/.rand   # 随机数文件
  • [ policy_match ]段落:定义证书签发策略(如国家、组织是否必须匹配):
    [ policy_match ]
    countryName             = match
    stateOrProvinceName     = match
    organizationName        = match
    organizationalUnitName  = optional
    commonName              = supplied
    emailAddress            = optional

为用户/服务器生成证书

(1)生成私钥

假设需要为服务器server.example.com签发证书,首先生成服务器私钥:

openssl genpkey -algorithm RSA -out /etc/pki/CA/private/server.key -aes256 -passout pass:ServerPassword123

(2)生成证书签名请求(CSR)

CSR包含公钥和申请者信息,需CA签名后形成有效证书:

openssl req -new -key /etc/pki/CA/private/server.key -out /etc/pki/CA/server.csr -passin pass:ServerPassword123 -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCA/OU=Server/CN=server.example.com"

(3)CA签发证书

使用CA的私钥和配置文件签发证书:

openssl ca -in /etc/pki/CA/server.csr -out /etc/pki/CA/certs/server.crt -days 365 -notext -md sha256 -passin pass:YourPassword123

参数说明:

  • -notext:证书文件不显示文本信息(二进制格式)
  • -md sha256:使用SHA256算法签名(推荐替代MD5/SHA1)

签发成功后,证书将存放在/etc/pki/CA/certs/server.crt,序列号自动写入index.txtserialserial自动递增)。

证书吊销与CRL管理

若私钥泄露或证书需要作废,需通过以下步骤吊销证书:

获取证书序列号

index.txt查询证书序列号:

openssl x509 -in /etc/pki/CA/certs/server.crt -noout -serial -issuer

输出示例:serial=01,或直接查看index.txt(格式为序列号,状态,证书信息)。

吊销证书

执行吊销命令(需输入CA私钥密码):

openssl ca -revoke /etc/pki/CA/certs/server.crt -keyfile /etc/pki/CA/private/cakey.pem -cert /etc/pki/CA/cacert.pem -passin pass:YourPassword123

执行后,index.txt中该证书状态标记为R(Revoked)。

生成证书吊销列表(CRL)

CRL是CA发布的已吊销证书列表,客户端可通过CRL验证证书有效性:

openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem -keyfile /etc/pki/CA/private/cakey.pem -cert /etc/pki/CA/cacert.pem -passin pass:YourPassword123 -days 7

参数说明:

  • -days 7:CRL有效期7天(需定期更新)

生成的crl.pem可部署到Web服务器供客户端下载,或通过OCSP服务实时验证。

证书应用与验证

部署服务器证书

server.crtserver.key部署到服务器(如Nginx、Apache),配置HTTPS时需指定证书和私钥路径:

server {
    listen 443 ssl;
    server_name server.example.com;
    ssl_certificate /etc/pki/CA/certs/server.crt;
    ssl_certificate_key /etc/pki/CA/private/server.key;
    # 其他SSL配置...
}

验证证书有效性

(1)本地验证证书链

openssl verify -CAfile /etc/pki/CA/cacert.pem /etc/pki/CA/certs/server.crt

输出server.crt: OK表示验证通过。

(2)检查证书吊销状态

使用openssl verify结合CRL文件:

openssl verify -CRLfile /etc/pki/CA/crl/crl.pem -CAfile /etc/pki/CA/cacert.pem /etc/pki/CA/certs/server.crt

若证书被吊销,会提示error 23 at 0 depth lookup: certificate revoked

安全注意事项

  1. 私钥保护:CA私钥必须加密存储(如AES256),权限严格限制为600,仅管理员可访问。
  2. 离线管理:根CA服务器应处于离线状态,仅用于签发证书和CRL,日常操作通过中间CA或在线CA完成。
  3. 定期备份:备份/etc/pki/CA目录(尤其是private/cakey.pemindex.txtserial),防止数据丢失。
  4. 证书轮换:根证书临近过期时需提前重新签发,服务器证书建议1-2年更新一次。

相关问答FAQs

Q1: 如何为多个子机构签发中间CA证书?
A1: 中间CA证书的签发流程与终端证书类似,需先为中间CA生成CSR(openssl req -new),然后由根CA使用openssl ca签发,签发时需在openssl.cnf中启用[ v3_intermediate_ca ]扩展(需手动添加配置),并设置basicConstraints = CA:TRUE标识中间CA身份,中间CA可继续签发终端证书,形成证书链(根CA→中间CA→终端证书),增强安全性。

Q2: 客户端如何自动信任私有CA证书?
A2: 客户端需安装私有CA的根证书(cacert.pem),Linux系统可将证书复制到/etc/pki/ca-trust/source/anchors/,执行update-ca-trust命令;Windows系统需双击cacert.pem并导入“受信任的根证书颁发机构”存储;Android/iOS系统需通过配置描述文件或手动安装证书,并设置为“信任”,客户端信任根CA后,即可验证其签发的所有终端证书。

分享:
扫描分享到社交APP
上一篇
下一篇