Openssl 常用命令

admin 2024年3月12日09:52:27评论15 views字数 7030阅读23分26秒阅读模式

准备工作                                               

建立demoCA目录,在demoCA目录下建立四个文件夹分别是:certs、crl、newcerts、private。在demoCA目录下,建立CA的数据库文件(index.txt)和序列号文件(serial)

touchindex.txt

echo 01 > serial

openssl ca命令注意如下:

   1、所以在使用 ca 子命令前,需要先进入 demoCA/ 目录的上级目录

   2、ca 命令需要读取的文件 :

       1)、CA 证书

       2)、CA 的 private key

       3)、所签发的证书的文本数据库:index.txt

       4)、序列号文件: serial

服务器证书                                       

server.key
opensslgenrsa -out server.key 1024
加密server.key
opensslgenrsaout server.keydes3 2048
解密
opensls rsainserver.keyout server.key
server.crt
openssl req -new -x509 -keyserver.key -out server.crt -days 7300
server.p7b->server.crt
openssl pkcs7 -print_certs -inform DER -in server.p7b -outserver.crt
如果想一次性生成server.crt & server.key
openssl reqnewx509nodesout server.crtkeyout server.key

客户端证书                                       

client.key
openssl genrsa -out client.key 1024


client.crs
openssl req -new -out client.csr -key client.key


client.crt
openssl x509 -req -in client.csr -out client.crt -CAserver.crt -CAkey server.key -
CAcreateserial -days 1825 (无index.txt和 serial 情况下的命令)
或(用ca命令的前提条件要求index.txt和serial,必须在demoCA目录的父目录下)


openssl ca –in demoCA/client.csr –out demoCA/client.crt–keyfile demoCA/private/server.key –cert demoCA/private/server.crt

client.p12
openssl pkcs12 -export -clcerts -in ssl.crt -inkeyssl.key -out ssl.p12 -passout pass:123


client.pfx
openssl pkcs12 -export -clcerts -in client.crt -inkeyclient.key -out client.pfx

补充

       openssl pkcs12 -export-in a.crt -inkey a.key -out a.pfx -passin pass:aaaa -passout pass:bbbb

       aaaa是解密key的口令,bbbb是输出的pfx口令

client.p12àclient.crt , client.key

       openssl pkcs12 –clcerts –nokeys–in client.p12 –password pass:123456 -out client.crt

       openssl pkcs12 -in client..p12-password pass:123456 -nocerts -nodes -out client.key

client.txtàclient.crt

对client.txt进行签名的命令

opensslca -in demoCA/client.txt -out demoCA/clientreq.crt -certdemoCA/private/server.crt -keyfile demoCA/private/server.key

验证证书                                               

openssl verify -CAfileserver.crt client.crt (server.crt client.crt必须为PEM编码的证书)

证书撤销列表                                         


召回一个证书(ssl.crt

openssl ca –revoke demoCA/ssl.crt –keyfiledemoCA/private/server.key –cert demoCA/private/server.crt

产生crl列表

openssl ca –gencrl –keyfiledemoCA/private/server.key –cert demoCA/private/server.crt –out demoCA/crl/server.crl


召回一个证书(client.crt):

openssl ca -revokedemoCA/client.crt -keyfile demoCA/private/serve
r.key -certdemoCA/private/server.crl


产生crl列表

openssl ca –gencrl –keyfiledemoCA/private/server.key –cert demoCA/private/server.crt –out demoCA/crl/server.crl


撤销列表编码转换

openssl crl -inform PEM -in server.crl -outform DER -out server-der.crl


显示撤销列表内容

显示PEM编码撤销列表内容

 openssl crlinform PEMinserver.crltextnoout

显示DER编码撤销列表内容

openssl crlinform DERinserver.crltext -noout

证书格式转换                                             

基础知识:

DER 编码的二进制 X.509

ITU-TRecommendation X.509 中定义的 ASN.1 DER(区别编码规则)与 ITU-T Recommendation X.209中定义的 ASN.1 BER(基本编码规则)相比,是一个限制更严格的编码标准,它构成了 DER 的基础。BER 和 DER 都提供了独立于平台的编码对象(如证书和消息)的方法,以便于其在设备和应用程序之间的传输。

在证书编码期间,多数应用程序都使用 DER,因为证书的一部分(CertificationRequest 的 CertificationRequestInfo)必须使用 DER 编码,才能对其进行签名。

不在运行 Windows Server 2003 计算机上的证书颁发机构也可能使用该格式,因此它支持互操作性。DER 证书文件使用 .cer 扩展名。

Base64 编码的 X.509

这种编码方式主要是为使用“安全/多用途 Internet 邮件扩展 (S/MIME)”而开发的(S/MIME 是一种通过 Internet 传输二进制附件的常用标准方法)。Base64 将文件编码为 ASCII 文本格式,这样可以减少传送的文件在通过 Internet 网关时被损坏的机率,同时,S/MIME 可以为电子消息发送应用程序提供一些加密安全服务,包括通过数字签名来证明原件(非拒绝),通过加密、身份验证和消息完整性来保证隐私和数据安全。

MIME(多用途 Internet 邮件扩展)标准(RFC 1341 及其后继者)定义了为传送电子邮件而进行任意二进制信息编码的一种机制。

由于所有符合 MIME 标准的客户端都可以对 Base64 文件进行解码,不在运行 Windows Server 2003 计算机上的证书颁发机构也可以使用该格式,所以它支持互操作性。Base64 证书文件使用 .cer 扩展名。

证书的编码为DER编码,但DER编码的文件是二进制格式不利于读写和传播,所以对DER编码的数据进行BASE64编码形成了PEM。

X.509是常见通用的证书格式。所有的证书都符合为Public keyInfrastructure 制定的ITU-T x509国际标准。

PKCS #7常用的后缀是: P7B, P7C, SPC

PKCS #12常用的后缀有: P12 ,PF

X.509 DER编码(ASCII)的后缀是: DER CER CRT

X.509PEM编码(base64)的后缀是:PEM CER CRT

cer/crt证书: 用于存储公钥证书的文件格式,它是二进制存放的,不含私钥,不能导入到个人存储区,因为个人存储区存储与私钥相关的数字证书

pfx/p12证书:含有证书和对应的私钥,可以导入IE的个人证书存储区

pem格式是经过base64编码的证书,der格式是DER编码的证书,p12格式的证书一般用于证书的分发,里面包含了证书和对应的私钥,

cer、crt格式只是一个后缀,该后缀的证书可以pem编码的也可以是der编码的

CER、CRT 后缀的证书文件有两种编码àDER二进制编码或者base64编码(.pem)

    Openssl使用PEM格式来存放各种信息,它是openssl默认采用的信息存放方式。Openssl中的PEM文件一般包含如下信息:

1) 内容类型

表明本文件存放的是什么信息内容,它的形式为“-------BEGIN XXXX ------”,与结尾的“------ENDXXXX------”对应。

2)  头信息  

表明数据是如果被处理后存放,openssl中用的最多的是加密信息,比如加密算法以及初始化向量iv。

3)  信息体

为BASE64编码的数据。

Openssl生成PEM格式文件的大致过程如下:

1)  将各种数据DER编码;

2)  将1)中的数据进行加密处理(如果需要);

3)  根据类型以及是否加密,构造PEM头;

4)  将2)中的数据进行BASE64编码,放入PEM文件。

pfx证书在导出时, 只能选择”不, 不要导出私钥” ”要导出私钥”被灰化了不能选择,所以只能导出现cer格式的证书

导入数字证书时,也提示改入成功,可是证书不在原来的”个人存储区里”

解决方法是: 在安装证书的时候, 在标识此密钥可导出的.这将允许您在稍后备份或传输密钥选勾.

但由于某公司 Proxy是PEM格式Prefer的,不支持DER经编码的证书,因此,要通过证书的编码转换,把DER编码转换为PEM编码,再经某公司处理。

格式转换:

client.cer àclient.der:相当于编码由PEMàDER
openssl x509in test.ceroutform DERout test.der
client.deràclient.cer:相当于编码由DERàPEM
openssl x509 -inform DER -in test.der -outform PEM -out test-pem.der


PKCS7格式转换:

openssl pkcs7 -informDER  -in test.p7b -out test-pem.p7b


显示证书内容                                    

asn1parse 用来解析ASN1编码的数据    asn1parse [options]<infile    -inform DER|TXT|PEM 输入格式    -in filename    -out filename 通常是DER编码    -noout 不输出    -offset number 开始解析的位置    -length number 需要解析的字节数    -i 缩进(indent)    -dump 对不可见数据显示16进制   asn1parse -inform DER -in ca.cer -i   显示结果:xx: 冒号前的代表起始字节数,d: 深度(用于缩进),hl:TLV种的TL,l: TLV中的L    0:d=0  hl=3 l= 137 cons: SEQUENCE    3:d=1  hl=3 l= 129 prim:INTEGER          :E5D21E1F5C8D20.....  135:d=1  hl=2 l=   3 prim:INTEGER           :010001
openssl asn1parse -inform DER -in test.der –i

显示不同编码的证书内容

显示DER编码证书内容:

Openssl x509 –inform DER–in test..cer

显示PEM编码证书内容:

    Openssl x509inform PEMintest.cer -text
0penssl x509inform PEMin test.certextnoout

显示PEM编码证书撤销列表:

Openssl crlinform PEMinserver.crltext
Openssl crlinform PEMinserver.crltextnoout

显示不同格式的证书内容

Pkcs7(从IE导出*.p7b证书默认为DER编码):

显示DER编码的p7b证书内容:

Openssl pkcs7-print_certs -inform DER  -in  test.p7b


PKCS7格式转换(DERàPEM):

openssl pkcs7 -informDER  -in test.p7b -out test-pem.p7b


显示PEM编码的p7b证书内容

Openssl pkcs7 –print_certs –in test-pem.p7b

检查私钥和证书匹配                                 

详细资料来源:

Verifying that a Private Key Matches a Certificate

How to verify that a private key goeswith a certificate

(Shamelessly stolen from (and expandingupon) The某公司 SSL FAQ)

The private key contains a series ofnumbers. Two of those numbers form the "public key", the others arepart of your "private key". The "public key" bits are alsoembedded in your Certificate (we get them from your CSR). To check that thepublic key in your cert matches the public portion of your private key, youneed to view the cert and the key and compare the numbers. To view theCertificate and the key run the commands:

$ openssl x509 -noout -text -in server.crt$ openssl rsa -noout -text -in server.key

The `modulus' and the `public exponent'portions in the key and the Certificate must match. But since the publicexponent is usually 65537 and it's bothering comparing long modulus you can usethe following approach:

$ openssl x509 -noout -modulus -in server.crt | openssl md5$ openssl rsa -noout -modulus -in server.key | openssl md5

And then compare these really shorternumbers. With overwhelming probability they will differ if the keys aredifferent. As a one-liner:

$ openssl x509 -noout -modulus -in server.pem | openssl md5 ;  openssl rsa -noout -modulus -in server.key | openssl md5

And with auto-magic comparison (If morethan one hash is displayed, they don't match):

$ (openssl x509 -noout -modulus -in server.pem | openssl md5 ;   openssl rsa -noout -modulus -in server.key | openssl md5) | uniq

BTW, if I want to check to which key orcertificate a particular CSR belongs you can compute

$ openssl req -noout -modulus -in server.csr | openssl md5

从证书中得出私钥modulus

 Opensslx509 –noout –modulus –in server.crt | openssl md5

从私钥中得出modulus

 Opensslrsa –noout –modulus –in server.key | openssl md5


原文始发于微信公众号(菜鸟小新):Openssl 常用命令

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年3月12日09:52:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Openssl 常用命令http://cn-sec.com/archives/2569192.html

发表评论

匿名网友 填写信息