使用openssl制作证书和进行CMS格式数字签名

openssl中有如下后缀名的文件
.key格式:私有的密钥
.csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
.crt格式:证书文件,certificate的缩写
.crl格式:证书吊销列表,Certificate Revocation List的缩写
.pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式
 
OpenSSL实现了PKCS7,为什么还要实现CMS?
PKCS7和CMS看起来一样,CMS基于PKCS7,还基于一个Privacy-Enhanced Mail的标准, 因此CMS也可解析PKCS7签名
区别是:PKCS#7不支持递归嵌套, CMS支持,CMS还有增加了其它一些东西

1.数字签名
非对称加密算法的效率是非常低的。
将内容使用hash函数生成摘要,再用私钥对摘要进行加密,生成数字签名。然后将内容附上数字签名一同传输。
收件方收到后,用公钥对数字签名进行解密,得到摘要,然后再对原内容进行hash生成摘要,比对这两个摘要是否相同,相同则说明内容没有被篡改。

2.数字证书
由CA颁发给网站的身份证书,里面包含了该网站的公钥,有效时间,网站的地址,CA的数字签名等。
所谓的CA数字签名,实际上就是使用了CA的私钥将网站的公钥等信息进行了签名,当客户端请求服务器的时候,网站会把证书发给客户端,客户端首先可以通过CA的数字签名校验CA的身份,也能证明证书的真实完整性。客户端有没有可能到一个假冒的CA去校验数字证书呢?不太可能,因为CA的地址是内嵌在浏览器中的,很难被篡改。

---------------------------------------------------------------

1. 创建根证书,rootca.pem为根证书
vi rootca.cnf
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = extensions
 
[ req_distinguished_name ]
C = CN
O = Test
CN = RootCA
 
[ extensions ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always, issuer
basicConstraints = CA:TRUE
keyUsage = cRLSign, keyCertSign

echo unique_subject=no > index.attr
openssl req -new -nodes -utf8 -sha256 -days 36500 -batch -x509 -config rootca.cnf -outform PEM -out rootca.pem -keyout rootca_pri.pem
openssl x509 -in rootca.pem -inform pem -outform der -out rootca.der

2. 颁发二级证书(公钥证书),signcert.pem为公钥证书
vi signcert.cnf
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = extensions
 
[ req_distinguished_name ]
C = CN
O = Test
CN = Signing Certificate
 
[ extensions ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid, issuer
basicConstraints = CA:FALSE
keyUsage = critical, nonRepudiation, digitalSignature
extendedKeyUsage = codeSigning

openssl genrsa -out signcert_pri.pem 2048
openssl req -new -config signcert.cnf -out signcert.csr -key signcert_pri.pem
openssl x509 -req -in signcert.csr -CA rootca.pem -CAkey rootca_pri.pem -CAcreateserial -out signcert.pem -days 3650 -extensions extensions -extfile signcert.cnf
openssl x509 -in signcert.pem -inform pem -outform der -out signcert.der


3. 创建CMS签名。
使用私钥证书signcert.pem和私钥signcert_pri.pem创建CMS格式签名。source.txt为签名前原始文件,signed_source.txt为签名后文件(signed_source.txt即为创建的CMS签名)
openssl cms -sign -in source.txt -inkey signcert_pri.pem -signer signcert.pem -out signed_source.txt -outform PEM -nodetach


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值