【安全课堂】openssl系列篇之Openssl 常用命令
  

深信服安全产品研发 3507

{{ttag.title}}
作者:某公司移动应用部

Openssl 常用命令
                   上一篇:openssl简介
                                   下一篇:Openssl以及证书认证


准备工作                                               

建立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
    opensslgenrsa –out server.key –des3 2048

解密
       opensls rsa –inserver.key –out 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 req –new –x509 –nodes–out server.crt –keyout 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 crl –inform PEM –inserver.crl –text –noout

显示DER编码撤销列表内容
       openssl crl –inform DER –inserver.crl –text -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 ,PFX

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 x509 –in  test.cer  –outform DER –out  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 x509 –inform PEM –intest.cer -text
0penssl x509 –inform PEM –in test.cer –text –noout

显示PEM编码证书撤销列表:
       Openssl crl –inform PEM –inserver.crl –text
       Openssl crl –inform PEM –inserver.crl –text –noout

显示不同格式的证书内容

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

打赏鼓励作者,期待更多好文!

打赏
暂无人打赏

Sangfor_闪电回_朱丽 发表于 2016-4-5 18:21
  
感谢分享!
❤★陈智强★❤ 发表于 2016-4-10 12:59
  

头像被屏蔽
新手166158 发表于 2019-5-4 22:59
  
提示: 作者被禁止或删除 内容自动屏蔽
发表新帖
热门标签
全部标签>
每日一问
技术笔记
技术盲盒
技术咨询
功能体验
干货满满
新版本体验
2023技术争霸赛专题
标准化排查
产品连连看
GIF动图学习
信服课堂视频
自助服务平台操作指引
运维工具
技术晨报
安装部署配置
每日一记
用户认证
通用技术
秒懂零信任
安全攻防
云计算知识
SDP百科
设备维护
深信服技术支持平台
答题自测
sangfor周刊
资源访问
排障笔记本
社区帮助指南
畅聊IT
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
上网策略
测试报告
日志审计
问题分析处理
流量管理
原创分享
解决方案
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
功能咨询
终端接入
授权
迁移
山东区技术晨报
地址转换
虚拟机
存储
加速技术
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选

本版达人

新手68983...

本周分享达人

零和一网络

本周提问达人