> 本文作者:丁辉 # OpenSSL搭建CA证书颁发机构Genpkey [官网文档](https://www.openssl.org/docs/man3.0/man1/openssl-genpkey.html) ## 基础环境准备 1. 安装 OpenSSL - Centos ```bash yum install openssl -y ``` - Ubuntu ```bash apt install openssl -y ``` ## 创建根证书颁发机构 1. 生成 CA 私钥 ```bash openssl genpkey -algorithm RSA -out RootCA.key ``` > -pkeyopt rsa_keygen_bits:4096 -aes256 2. 生成 CA 自签名证书 ```bash openssl req -key RootCA.key -new -x509 -days 3650 -out RootCA.pem -subj "/C=CN/ST=Beijing/L=Beijing/O=Linux/OU=Linux/CN=*.com" ``` `-subj`:后面跟着的是一个字符串,用于指定证书的主题(Subject)字段。这些字段包含了证书所有者的识别信息,通常用于证书显示和验证过程中。各个字段的意义如下: - `/C=CN`:国家名称,使用两位国家代码,例如 `CN` 代表中国。 - `/ST=YourState`:州或省份名称,根据你的地理位置填写。 - `/L=YourCity`:城市名称,根据你的地理位置填写。 - `/O=YourOrganization`:组织名称,表示证书所有者所属的公司或组织。 - `/OU=YourOrganizationalUnit`:组织单位名称,是组织内部的一个部门或单位。 - `/CN=YourCommonName`:常用名称,通常是域名或个人的名称。对于根 CA,这里可以是机构的名称或描述。 - `/emailAddress=your.email@example.com`:电子邮件地址,用于联系证书的所有者。 ## 创建并签署子证书(这里演示为泛域名证书) 1. 生成子证书密钥 ```bash openssl genpkey -algorithm RSA -out wildcard.key ``` 2. 创建证书签名请求(CSR) > 使用子证书的私钥创建一个 CSR。CSR 包含证书的相关信息。 ```bash openssl req -new -key wildcard.key -out wildcard.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Linux/OU=Linux/CN=*.com" ``` 3. 使用根证书签署子证书 ```bash openssl x509 -req -days 3650 -in wildcard.csr -CA RootCA.pem -CAkey RootCA.key -CAcreateserial -out wildcard.crt -sha256 ``` ## 分发证书 > 将子证书(server.pem)和根证书(RootCA.pem)分发给需要验证身份的用户或系统。 ### 注意事项: - **安全性**:确保私钥文件(如 RootCA.key 和 server.key)安全存储,避免泄露。 - **有效期**:根证书通常具有较长的有效期(如 10 年),而子证书具有较短的有效期(如 1 年)。根据你的安全政策调整这些设置。 - **撤销列表(CRL)和在线证书状态协议(OCSP)**:为了提高安全性,建立机制以撤销或检查证书的有效性。 > 这只是创建 CA 和管理证书的基本概念。实际操作中,可能需要考虑更多的安全措施和复杂的配置选项。 ```bash openssl pkcs12 -export -out RootCA.pfx -inkey RootCA.key -in RootCA.pem ```