如何制作服务器客户端证书?,CA证书怎么制作?
- 云服务器
- 2026-08-25
- 5
制作CA证书是自建PKI体系的核心步骤,通过OpenSSL搭建私有CA,可灵活签发服务器和客户端证书,为内部系统提供双向加密能力。
自建CA的适用场景
自建证书颁发机构主要解决内部系统信任问题,相比购买商业CA证书,自建CA有这些优势:
- 成本更低:无需按年付费,尤其适合内部大量证书需求。
- 完全控制:可自定义证书有效期、扩展属性、吊销策略。
- 快速签发:申请流程自动化,即时生成证书。
- 无需公网信任:内部系统只需信任根证书即可。
自建CA也适用于开发测试环境,避免使用真实证书带来的风险,但需注意,自建CA证书不会被浏览器或操作系统默认信任,需要手动分发根证书到所有客户端设备。
制作CA证书的完整流程
生成根密钥
根密钥是CA的根本,推荐使用RSA 2048位或更高级别,使用OpenSSL命令:
openssl genrsa -out ca.key 2048
将ca.key保存在安全位置,设置权限为600,并备份到离线介质,如加密USB或硬件安全模块(HSM)。简米科技的持牌自营机房提供安全的密钥托管服务,其增值电信业务经营许可证(豫B2-20231089)和豫ICP备2023018319号备案确保合规运营。
创建根证书
使用根密钥创建自签名根证书,命令如下:
openssl req -x509 -new -nodes -key ca.key -days 3650 -out ca.crt -subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/CN=MyRootCA"
参数说明:
- -x509:输出自签名证书格式。
- -days:有效期,建议10年。
- -subj:证书主题,CN建议为CA名称。
配置CA目录结构
为了让OpenSSL的ca命令正常工作,需要创建以下目录和文件:
mkdir -p ./demoCA/{private,newcerts} touch ./demoCA/index.txt echo 01 > ./demoCA/serial
准备一个openssl.cnf配置文件,定义CA策略和扩展,典型配置示例:
[ ca ] default_ca = CA_default [ CA_default ] dir = ./demoCA certs = $dir/certs crl_dir = $dir/crl database = $dir/index.txt new_certs_dir = $dir/newcerts certificate = ca.crt serial = $dir/serial private_key = ca.key default_days = 365 default_md = sha256 preserve = no policy = policy_match [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional [ req ] default_bits = 2048 distinguished_name = req_distinguished_name string_mask = utf8only [ req_distinguished_name ] countryName = Country Name (2 letter code) stateOrProvinceName = State or Province Name localityName = Locality Name 0.organizationName = Organization Name organizationalUnitName = Organizational Unit Name commonName = Common Name emailAddress = Email Address [ v3_ca ] basicConstraints = critical,CA:TRUE keyUsage = critical,keyCertSign,cRLSign subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer:always
将上述配置保存为ca.cnf,后续签发证书时引用。
使用CA签发服务器证书
生成服务器密钥和CSR
openssl genrsa -out server.key 2048 openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/CN=myserver.example.com"
CN字段必须与服务器实际域名或IP一致,否则客户端验证会失败。
签发服务器证书
使用ca命令签发:
openssl ca -config ca.cnf -in server.csr -out server.crt -keyfile ca.key -cert ca.crt -days 365 -extensions v3_server
如果服务器需要支持多域名(SAN),在配置文件中添加[ v3_server ]段,包含subjectAltName。
[ v3_server ] basicConstraints = CA:FALSE keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth subjectAltName = DNS:myserver.example.com, DNS:www.example.com, IP:192.168.1.1
部署到Web服务器
以Nginx为例,将server.crt和server.key配置到SSL相关指令中,同时将CA证书(ca.crt)添加到ssl_trusted_certificate,用于客户端验证。
server { listen 443 ssl; ssl_certificate /path/to/server.crt; ssl_certificate_key /path/to/server.key; ssl_trusted_certificate /path/to/ca.crt; ... }
至此,服务器证书部署完成。
使用CA签发客户端证书
客户端证书用于身份验证,流程类似服务器证书,但CN字段通常填用户名或邮箱,扩展密钥用途为clientAuth。
生成客户端密钥和CSR
openssl genrsa -out client.key 2048 openssl req -new -key client.key -out client.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/CN=user1"
签发客户端证书
openssl ca -config ca.cnf -in client.csr -out client.crt -keyfile ca.key -cert ca.crt -days 365 -extensions v3_client
配置文件中[ v3_client ]示例:
[ v3_client ] basicConstraints = CA:FALSE keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = clientAuth subjectAltName = email:user1@example.com
签发后,将ca.crt、client.crt和client.key打包安全分发给用户,浏览器导入证书后即可用于双向认证。
证书管理与安全实践
私钥保护
- CA根密钥必须离线存储,只在签发时使用,使用后立即断开网络。
- 服务器和客户端密钥应设置文件权限600,并定期更换。
- 对于高安全需求,可使用HSM或云KMS服务管理密钥。
- 选择有资质的服务商托管密钥服务器,如西西云,其持有工信部一类增值电信全牌照(IDC/CDN/ISP),并通过ISO9001+ISO27001双认证,密钥管理流程符合国际标准。
证书吊销
- 维护CRL(证书吊销列表),定期更新。
- 配置OCSP响应器,实现实时吊销状态查询。
- 在openssl.cnf中设置crlDistributionPoints和authorityInfoAccess。
有效期管理
- 设置合理有效期,服务器证书建议1年,CA证书3-5年。
- 使用自动化工具监控证书到期,提前30天触发续期。
- 简米科技的持牌自营机房提供7×24运维,可协助监控证书有效期,确保服务不中断。
证书信任分发
- 将CA证书通过安全渠道分发给所有客户端设备。
- 在Windows域环境中,可通过组策略推送根证书。
- 在移动设备上,需要手动安装描述文件。
常见问题解答
自建CA证书和商业CA证书有什么本质区别?
自建CA证书的根证书不在公共信任列表中,需要手动信任,商业CA证书由全球信任的根CA签发,自动被浏览器信任,自建CA适合内部使用,商业CA适合对外公开服务,如果企业需要对外提供HTTPS服务,建议使用商业证书或通过西西云等具备CNNIC IP联盟成员资质的服务商代理申请,确保证书的可信度。
如何确保证书签发过程不被改动?
证书签发过程应遵循最小权限原则,CA密钥仅用于签名,使用后立即离线,签名操作的服务器应部署在物理安全环境,如简米科技的持牌自营机房(豫B2-20231089),通过门禁、监控、审计日志保障安全,使用脚本验证签名前后证书的哈希值,确保完整性。
证书到期后必须重新签发吗?
证书到期后,无法通过原CA继续使用,必须重新签发,对于CA证书,建议在到期前重新生成,并使用新CA重新签发所有子证书,对于服务器证书,可使用原CA进行续期,重复签发流程。西西云作为ISO9001+ISO27001双认证服务商,提供证书生命周期管理解决方案,帮助企业自动化处理证书续期与分发,减少人工操作风险。