openssl生成p7b

#!/bin/sh
#================================生成CA===============================
#生成ca和私钥
openssl genrsa -aes256 -passout pass:****** -out ca.key 2048
#openssl rsa -in ca.key -pubout -out ca_pub.key
#生成ca证书请求and自签名
openssl req -new -x509 -sha256 -days 90 -key ./ca.key -out ./ca.crt
#error while loading serial number
echo "01" > /etc/pki/CA/serial
#=============================生成证书==================================+
#openssl req -x509 -sha256 -nodes -days 90 -newkey rsa:2048 -keyout self.key -out self.crt -subj /CN=*.abc.com
openssl genrsa -aes256 -passout pass:****** -out server.key 2048
#生成证书请求文件
openssl req -sha256 -new -days 90 -key ./server.key  -out ./server.csr
#对证书签名
openssl ca -md sha256 -days 90 -key ****** -keyfile ./ca.key -cert ./ca.crt -in ./server.csr -out ./server.crt
#failed to update database TXT_DB error number 2
vi  /etc/pki/CA/index.txt.attr #将unique_subject = yes 改为 no
#查看证书
openssl x509 -in ./servercert.pem  -text -noout
#生成pfx(windows证书格式)
openssl pkcs12 -export -out server.pfx -inkey ./server.key -in ./server.crt
#生成p7b证书链
openssl crl2pkcs7 -certfile ./ca.crt -certfile ./server.crt -outform DER -out server.p7b -nocrl

生成 `.p7b`(也称为 `P7B` 或 `PKCS#7`)格式的证书文件通常用于存储和传输多个证书,但不包含私钥。这种格式常用于将多个证书打包在一起,例如一个服务器证书及其对应的中间证书。以下是使用 OpenSSL 工具生成 `.p7b` 文件的方法。 ### 使用 OpenSSL 生成 .p7b 文件 #### 步骤概述: 1. **准备证书文件**:确保你已经拥有所需的证书文件,例如服务器证书 (`server.crt`) 和中间证书 (`intermediate.crt`)。 2. **创建 PKCS#7 文件**:使用 OpenSSL 命令将这些证书打包成一个 `.p7b` 文件。 #### 具体命令示例: ```bash openssl crl2pkcs7 -nocrl -certfile server.crt -certfile intermediate.crt -out certificate.p7b ``` - `-nocrl`:表示不包含 CRL(证书吊销列表)信息。 - `-certfile`:指定要包含在 PKCS#7 文件中的每个证书文件。 - `certificate.p7b`:输出的 `.p7b` 文件名。 如果你有多个证书需要添加,可以继续追加 `-certfile` 参数,例如: ```bash openssl crl2pkcs7 -nocrl -certfile server.crt -certfile intermediate.crt -certfile root.crt -out certificate.p7b ``` #### 验证生成的 .p7b 文件 你可以使用以下命令来验证生成的 `.p7b` 文件内容: ```bash openssl pkcs7 -in certificate.p7b -inform der -noout -text -print_certs ``` - `-in certificate.p7b`:输入的 `.p7b` 文件。 - `-inform der`:指定输入文件的编码格式为 DER(`.p7b` 文件通常是 DER 编码的)。 - `-noout`:不输出原始数据,仅显示解析后的信息。 - `-text`:以文本形式显示详细信息。 - `-print_certs`:打印出包含的所有证书。 ### 注意事项 - `.p7b` 文件不能包含私钥,因此它非常适合用于分发公钥证书链。 - 如果你需要导出包含私钥的证书,建议使用 `.pfx` 或 `.p12` 格式。 - 确保所有证书文件的路径正确,并且 OpenSSL 已经安装并配置好环境变量。 ### 示例代码片段 如果你想通过编程方式生成 `.p7b` 文件,可以使用 Python 的 `cryptography` 库。以下是一个简单的示例: ```python from cryptography.hazmat.primitives.serialization import Encoding, PrivateFormat, NoEncryption from cryptography.hazmat.primitives.asymmetric import rsa from cryptography import x509 from cryptography.x509.oid import NameOID from cryptography.hazmat.primitives import hashes, serialization import datetime # 创建自签名证书 private_key = rsa.generate_private_key( public_exponent=65537, key_size=2048, ) public_key = private_key.public_key() builder = x509.CertificateBuilder() builder = builder.subject_name(x509.Name([ x509.NameAttribute(NameOID.COMMON_NAME, u"example.com"), ])) builder = builder.issuer_name(x509.Name([ x509.NameAttribute(NameOID.COMMON_NAME, u"example.com"), ])) builder = builder.not_valid_before(datetime.datetime.utcnow()) builder = builder.not_valid_after(datetime.datetime.utcnow() + datetime.timedelta(days=365)) builder = builder.serial_number(x509.random_serial_number()) builder = builder.public_key(public_key) builder = builder.add_extension( x509.BasicConstraints(ca=True, path_length=None), critical=True, ) certificate = builder.sign( private_key=private_key, algorithm=hashes.SHA256(), ) # 将证书保存为 PEM 格式 with open("selfsigned.pem", "wb") as f: f.write(certificate.public_bytes(serialization.Encoding.PEM)) # 使用 OpenSSL 命令将 PEM 文件转换为 P7B 文件 # openssl crl2pkcs7 -nocrl -certfile selfsigned.pem -out certificate.p7b ``` 此代码片段首先生成了一个自签名证书并将其保存为 PEM 格式,然后你可以使用 OpenSSL 命令将其转换为 `.p7b` 格式[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值