openssl证书命令行

openssl x509部分命令
打印出证书的内容:
openssl x509 -in cert.pem -noout -text
打印出证书的系列号
openssl x509 -in cert.pem -noout -serial
打印出证书的拥有者名字
openssl x509 -in cert.pem -noout -subject
以RFC2253规定的格式打印出证书的拥有者名字
openssl x509 -in cert.pem -noout -subject -nameopt RFC2253
在支持UTF8的终端一行过打印出证书的拥有者名字
openssl x509 -in cert.pem -noout -subject -nameopt oneline -nameopt -escmsb
打印出证书的MD5特征参数
openssl x509 -in cert.pem -noout -fingerprint
打印出证书的SHA特征参数
openssl x509 -sha1 -in cert.pem -noout -fingerprint
把PEM格式的证书转化成DER格式
openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER
把一个证书转化成CSR
openssl x509 -x509toreq -in cert.pem -out req.pem -signkey key.pem
给一个CSR进行处理,颁发字签名证书,增加CA扩展项
openssl x509 -req -in careq.pem -extfile openssl.cnf -extensions v3_ca -signkey key.pem -out cacert.pem
给一个CSR签名,增加用户证书扩展项
openssl x509 -req -in req.pem -extfile openssl.cnf -extensions v3_usr -CA cacert.pem -CAkey key.pem -CAcreateserial
查看csr文件细节:

openssl req -in my.csr -noout -text

 

生成RSA私钥

openssl genrsa -out RootCA.key 2048/1024

私钥生成公钥

openssl rsa -in RootCA.key -pubout -out RootCA_public_key.pem

生成证书链

生成根CA并自签(Common NameRootCA)

openssl genrsa -des3-out keys/RootCA.key 2048

openssl req -new-x509 -days 3650 -key keys/RootCA.key -out keys/RootCA.crt

生成二级CA(Common NamesecondCA)

openssl genrsa-des3 -out keys/secondCA.key 2048

openssl rsa -inkeys/secondCA.key -out keys/secondCA.key

openssl req -new-days 3650 -key keys/secondCA.key -out keys/secondCA.csr

openssl ca-extensions v3_ca -in keys/secondCA.csr -config /etc/pki/tls/openssl.cnf -days3650 -out keys/secondCA.crt -cert keys/RootCA.crt -keyfile keys/RootCA.key

生成三级CA(Common NamethirdCA)

openssl genrsa-des3 -out keys/thirdCA.key 2048

openssl rsa -inkeys/thirdCA.key -out keys/thirdCA.key

openssl req -new-days 3650 -key keys/thirdCA.key -out keys/thirdCA.csr

openssl ca-extensions v3_ca -in keys/thirdCA.csr -config /etc/pki/tls/openssl.cnf -days3650 -out keys/thirdCA.crt -cert keys/secondCA.crt -keyfile keys/secondCA.key

使用三级CA签发服务器证书

openssl genrsa-des3 -out keys/server.key 2048

openssl rsa -inkeys/server.key -out keys/server.key

openssl req -new-days 3650 -key keys/server.key -out keys/server.csr

openssl ca -inkeys/server.csr -config /etc/pki/tls/openssl.cnf -days 3650 -outkeys/server.crt -cert keys/thirdCA.crt -keyfile keys/thirdCA.key

 

<think>我们正在模拟证书签发过程,使用OpenSSL命令行工具。证书签发通常涉及以下步骤: 1. 生成根证书的私钥 2. 创建自签名的根证书(CA证书) 3. 生成服务器(或用户)证书的私钥 4. 创建服务器证书证书签名请求(CSR) 5. 使用根证书的私钥对服务器证书的CSR进行签名,生成服务器证书 下面我们逐步进行: ### 步骤1: 生成根证书的私钥 使用以下命令生成一个RSA私钥(例如,2048位): ```bash openssl genrsa -out ca.key 2048 ``` ### 步骤2: 创建自签名的根证书 使用上一步生成的私钥创建自签名的根证书(CA证书)。在生成证书时,需要提供一些信息(如国家、组织等): ```bash openssl req -new -x509 -days 3650 -key ca.key -out ca.crt ``` 执行此命令后,会提示输入一些信息,这些信息将被嵌入到根证书中。 ### 步骤3: 生成服务器证书的私钥 同样,生成一个用于服务器证书的私钥: ```bash openssl genrsa -out server.key 2048 ``` ### 步骤4: 创建服务器证书证书签名请求(CSR) 使用服务器私钥生成证书签名请求(CSR): ```bash openssl req -new -key server.key -out server.csr ``` 同样,需要输入一些信息(注意:这些信息不必与根证书相同,但通常一些字段如国家、组织等需要符合一定的规则)。 ### 步骤5: 使用根证书签发服务器证书 使用根证书的私钥和根证书对服务器证书的CSR进行签名: ```bash openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt ``` 这里: - `-CA` 指定根证书 - `-CAkey` 指定根证书的私钥 - `-CAcreateserial` 选项会生成一个序列号文件(ca.srl),用于记录下一个可用的序列号 ### 验证证书 我们可以验证服务器证书是否由根证书签发: ```bash openssl verify -CAfile ca.crt server.crt ``` ### 示例 假设我们模拟一个简单的CA和服务器证书的签发过程,具体命令如下: 1. 生成CA私钥: ```bash openssl genrsa -out ca.key 2048 ``` 2. 生成自签名CA证书(有效期10年): ```bash openssl req -new -x509 -days 3650 -key ca.key -out ca.crt # 输入信息示例: # Country Name (2 letter code) []:CN # State or Province Name (full name) []:Beijing # Locality Name (eg, city) []:Beijing # Organization Name (eg, company) []:My CA # Organizational Unit Name (eg, section) []:Root CA # Common Name (eg, fully qualified host name) []:My CA # Email Address []:ca@example.com ``` 3. 生成服务器私钥: ```bash openssl genrsa -out server.key 2048 ``` 4. 生成服务器CSR: ```bash openssl req -new -key server.key -out server.csr # 输入信息示例(注意Common Name是服务器的域名,例如:www.example.com): # ... 其他信息可以不同,但Common Name要写服务器域名 ``` 5. 用CA证书签名服务器CSR: ```bash openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt ``` 6. 验证: ```bash openssl verify -CAfile ca.crt server.crt ``` 这样,我们就得到了: - `ca.key`: CA私钥 - `ca.crt`: CA证书(根证书) - `server.key`: 服务器私钥 - `server.csr`: 服务器证书签名请求(可保留或删除) - `server.crt`: 服务器证书(由CA签发) ### 注意事项 - 在实际应用中,CA的私钥必须严格保护,因为泄露CA私钥意味着可以签发任意证书。 - 上述过程是简化版,实际中可能还会涉及扩展项(如主题备用名称SAN)等,可以通过配置文件添加。 ### 添加扩展项(可选) 如果需要为服务器证书添加扩展项(例如subjectAltName),可以创建一个配置文件(如`server.ext`): ``` authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = www.example.com DNS.2 = example.com ``` 然后在签名时使用该配置文件: ```bash openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -extfile server.ext ``` 这样生成的服务器证书就包含了SAN扩展。 §§相关问题§§ 1. 如何为OpenSSL生成的证书添加主题备用名称(SAN)? 2. 如何使用OpenSSL创建中间CA并签发证书? 3. 如何将根证书安装到系统信任库中? 4. OpenSSL命令中,`-CAcreateserial`参数的作用是什么? 5. 如何查看证书的详细信息(如有效期、颁发者、主题等)?</think>### OpenSSL命令行模拟证书签发过程 OpenSSL命令行工具模拟证书签发过程主要包括以下步骤: #### 1. 生成根证书(CA证书) ```bash # 生成CA私钥 openssl genrsa -out ca.key 2048 # 创建自签名根证书(有效期10年) openssl req -new -x509 -days 3650 -key ca.key -out ca.crt ``` 执行后会提示输入证书信息(国家/组织/通用名等),通用名建议使用`My Root CA`。 #### 2. 生成服务器证书请求(CSR) ```bash # 生成服务器私钥 openssl genrsa -out server.key 2048 # 创建证书签名请求(CSR) openssl req -new -key server.key -out server.csr ``` 在通用名(Common Name)处输入服务器域名(如`www.example.com`)。 #### 3. 签发服务器证书 ```bash # 使用CA证书签发服务器证书 openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt ``` 参数说明: - `-CAcreateserial`:生成唯一的序列号文件(`ca.srl`) - `-days 365`:证书有效期1年 - 输出`server.crt`为最终签发的证书 #### 4. 验证证书链 ```bash # 验证证书是否由CA签发 openssl verify -CAfile ca.crt server.crt # 查看证书详细信息 openssl x509 -in server.crt -text -noout ``` #### 完整流程示例 ```bash # 生成CA openssl genrsa -out ca.key 2048 openssl req -new -x509 -days 3650 -key ca.key -out ca.crt # 生成服务器证书 openssl genrsa -out server.key 2048 openssl req -new -key server.key -out server.csr openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt # 验证 openssl verify -CAfile ca.crt server.crt ``` #### 关键文件说明: | 文件 | 作用 | |------|------| | `ca.key` | CA私钥(需严格保密) | | `ca.crt` | 根证书(需分发给客户端) | | `server.key` | 服务器私钥 | | `server.csr` | 证书签名请求(可删除) | | `server.crt` | 最终服务器证书 | ### 常见问题解决 1. **证书验证失败**: ```bash # 添加CA信任链 cat ca.crt >> /etc/ssl/certs/ca-certificates.crt ``` 2. **缺少扩展属性**: 使用配置文件添加扩展(创建`ext.cnf`): ```ini [ req ] req_extensions = v3_req [ v3_req ] subjectAltName = @alt_names [ alt_names ] DNS.1 = www.example.com ``` 签发时添加:`-extfile ext.cnf -extensions v3_req` 3. **密钥格式转换**(如需要PKCS#12格式): ```bash openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt ``` > 注意:生产环境应使用更安全的椭圆曲线密钥(如`openssl ecparam -genkey -name prime256v1`),并设置合理的证书有效期[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值