天天看点

openssl加解密原理

<code>加密算法和协议:</code>

<code>一、加密和解密简介</code>

<code>二、OpenSSL和GPG</code>

<code>三、对称加密的密钥分发</code>

<code>四、非对称加密</code>

<code>五、SSL/TLS的实现</code>

<code>六、OpenSSL应用</code>

<code>七、构建私有CA</code>

<code>八、证书签署案例</code>

一、加密和解密简介

    对称加密:数据加密传输(保密性),DES,3DES,AES,

    公钥加密:身份验证,密钥交换,数字签名(特征码加密) ,(不常用,比对称加密慢3个数量级)

            :RSA,DSA

    单向加密:保证数据的完整性,依赖于数字签名

            :sha[1,224,256},MD5

    密钥交换:DH,RSA,ECDH(椭圆曲线DH),ECDHE(临时椭圆曲线DH)

数字签名:用自己的信息,加密要发送的数据的特征码

    //一般数字签名,签的是要加密的数据的特征码

    目的:验证发送者的身份

http需要依赖于SSL/TLS---&gt;HTPPS

    TCP/IP层:

        应用层                            ||资源子网

        ===========================================SSL:半层在应用层和传输层之间

        传输层                            ||通信子网

        网络层    

        主机到网络层:{数据链路层+物理层}

        ===========================================

        资源子网+通信子网    

        内核空间+用户空间    

    //早期的数据传输是不加密的,因此出现了SSL,提供调用实现加密,不加密也可以实现通信

    //SSL能完成秘钥分发和加解密功能,SSL是一种规范和协议

    //程序员开发的时候:调用该库

    //该库功能:网络方面{秘钥分发},加解密

OSI七层:

通信子网的功能:由内核实现

资源子网:在用户空间是如何实现:

    诸多协议,程序,服务端,客户端

    应用程序:自己负责报文封装,应用层首部添加等

            :应用程序的具体实现靠的是应用程序自身,应用程序的进程负责封装应用层的报文

            :然后:到/传输层/网络层/主机到网络层//层层封装----&gt;解封装--&gt;交给应用层注册使用该端口的进程

HTTP调用SSL成为了HTTPS

    http--&gt;https(支付的时候用)--&gt;全栈https

    全栈https //避免恶意插入广告和恶意信息窃取    

    传输层协议:TCP,UDP,SCTP//流控传输协议,

        port:进程地址,进程向内核注册使用某端口,(独占)

        socket=ip:port是标识进程地址的

主机间的通信:其实就是主机上的进程间的通信        

    进程间通信的方式:

        同一主机上的通信:基于IPC机制,message queue,shm,semerphor[旗语],..

            同一主机上也可以使用socket进行通信

        不同主机上的通信:socket=ip:port,C:ip+port和S:ip+port//成对出现进行通信

                cip:port《----》sip:port

    完成通信:

        server端需要打开一个端口,监听该端口(ip:port)

        1-1024:固定端口 

        1025-3999:半随机

        4000-6500:随机

        具体查看:#cat /proc/sys/net/ipv4/ip_local_port_range,

    通信安全的目标:

        保密性:confidentiality

        完整性:integrity

            数据完整性

            系统完整性

        可用性:availability

    攻击类型:    

        威胁保密性攻击:窃听,通信量分析

        威胁完整性的攻击:更改、伪装、重放[备份多次发送]、否认

        威胁到可用性攻击:拒绝服务DOS(deny of service),DDOS

    解决方案:    

        技术(加密和解密)

        服务(用于抵御攻击的服务,也即是为了上述安全目标而特地设计的安全服务)    

        加密和解密

            传统加密方法:替代加密算法(替换某字母或者后退几个)、置换加密算法()

            现代加密方法:块加密方法(切割成块,然后单独加密,各块之间进行异或运算等):数据窃取者必须拿到完整的数据和才可以

        服务:

            认证机制:

            访问控制机制:

        密钥算法和协议

            对称加密

            非对称加密(    公钥加密)

            单向加密

            认证协议

二、OpenSSL和GPG

Linux系统加密:OpenSSL(SSL),GPG(pgp)

    OpenSSL:三部分组成

        1.加密解密库 libencrypt,

        2.libssl库 //安全通信,加密模块应用库,实现了tls和ssl

        3.openssl 命令行工具,实现加密解密,以及实现ssl安全通信

        //90%都是调用openssl来实现安全

    OpenSSL出现了一个大的漏洞 //一个开源组织维护,只靠捐献进行生存-致敬

        https://www.cnblogs.com/milantgh/p/3665901.html //openssl漏洞简介

    加密算法和协议

        对称加密:加密和解密使用同一个密钥,//但是加密和解密算法可能不同

            DES:data encryption standard//数据加密标准

                64bit明文加密为64bit密文,解密:64bit密文解密为64bit明文

                8Byte为一个块 //已经被破解

            3DES:Triple DES //3个数量级,一个数量级10倍

            AES:Advanced Encryption Standard

                支持变长密钥:128.192,256,384bit密钥

            Blowflsh Twoflsh IDEA RC6 CAST5 

            特性:

                1.加密、解密使用同一个密钥

                2.将原始数据分割成为固定大小的块,逐个进行加密

            缺陷:

                1.密钥过多 //s被多个用户同时访问,需要同时保持n个密钥,但是又不能相同

                2.密钥分发困难 //如何拿到密码,密钥交换基于算法实现        

        非对称加密://稍后介绍

gpg用法://这里不做介绍,请自行理解

三、对称加密的密钥分发

1.分发的方式

1、A选择一个密钥后以物理的方式传递给B

2、第三方选择密钥后物理地传给A和B

3、如果A和B先前或最近使用过一个密钥,则一方可以将 新密钥用旧密钥加密后发送给另一方

4、如果A和B到第三方C有加密连接,则C可以在加密连接上发送密钥给A、B

    分析:

        1和2需要人工交付

        3,一旦攻击者获得一个密钥,则后续所有的密钥都不再安全,可以进行重放攻击

        4.需要密钥分发中心,广泛使用

2.分发方案

    原理:密钥分发中心KDC和每个终端用户都共享一对唯一的主密钥(用物理的方式传递,如U盾)。

        终端用户每次回话,都要向KDC申请唯一的会话密钥,会话密钥通过与KDC共享的主密钥的主密钥来完成传递

1、A以明文形式向KDC发送会话密钥请求包。包括通话双方A、B的身份以及该次传输的唯一标识N1,称为临时交互号(nonce)。

临时交互号可以选择时间戳、随机数或者计数器等。KDC可根据临时交互号设计防重放机制。

2、KDC返回的信息包括两部分。

第一部分是A想获取的信息,用A的主密钥KA加密,包括通话密钥Ks和KDC收到的请求包内容用以验证消息到达KDC前是否被修改或者重放过。

第二部分是B想获取的信息,用B的主密钥KB加密,包括通话密钥Ks和A的身份。A收到后这部分消息便原样发给B。

3、为保证A发给B的会话密钥信息未被重放攻击,A、B使用会话密钥进行最后的验证。

B使用新的会话密钥Ks加密临时交互号N2并发给A。A对N2进行一个函数变换后,用会话密钥发给B验证。

对于大型网络,可以建立KDC的层次体系来使得主密钥分发的开销最小化。

四、非对称加密

1.公钥加密:密钥分为公钥和私钥

    公钥:从私钥中提取,公开给所有人:pubkey

    私钥:通过工具创建,使用者自己留存,必须保存期私密性:private key

    特点:用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然

    用途:数字签名:主要用于让接收方确认发送方的身份

          密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方

          数据加密:

    数据发送的过程中[]:用对方的公钥加密,传输

    身份认证的过程中[数字签名]:用自己的私钥加密,然后发给对方,对方用我们的公钥能够解密,完成身份认证

    算法:RSA,DSA,ELGamal

        DSS(DSA):digital signatur Standard/Algorthm

        DSA:仅能备用来签名,不能加解密

        RSA:既能签名,又能加解密    

2.单项加密:

    只能加密,不能解密 //提取数据指纹[特征码]信息

    特征码:定长输出,雪崩效应;

    功能:完整性,没有被修改过

    算法:

        md5:message digest version5 :128bit

        sha1:secure hash algorithm 1 :160bits

        sha224,sha256,sha384,sha512

    密钥IKE:internet key exchange //密钥交换

        公钥加密:

        DH(deffle-hellman):

            DH算法:密码本身不必在网络上传送,就能够协商生成

                A:p,g

                B:p,g //双方协商生成p,g等数组,明文交换,别人能够看到

                A:x //这个数据是私自生成的,B不知道,其他人也不知道

                    1.--&gt;p^x%g===&gt;B

                    2.(p^y%g)^x==p^xy%g

                B:y

                    1.--&gt;p^y%g===&gt;A

                    2.(p^x%g)^y===p^xy%g //和A2的结果是一样的,这个就是密钥

        公钥加密有风险,因为密钥是在网络上传送的,所以更倾向于DH

3.公钥加密过程:

    1.加密特征码://保证数据完整性和身份验证

        利用单项加密算法:提取特征码,定长输出 //然后使用自己的私钥,加密特征码

        注意:不能保证数据的保密性,因为其他人也可以进行解密特征码

            bob用同样的算法,解密特征码,一致则完整以及身份得到验证

        注意:加密特征码的过程,就称为生成数字签名的过程

    2.A生成一个一次性的对称密钥,加密整个数据,

        B用A的pkey加密对称密钥,附加到数据后,发送给A

    3.A先用自己的私钥解密数据,得到对称密钥,进行解密//密钥交换

            用B的公钥解密签名,能解密则身份得到验证,

            然后用单项加密算法,得到对称码,对比验证数据保密性

4.B想和A进行通信

    B用单项加密算法得到特征码,用自己的私钥加密特征码

    [特征码{B的私钥加密}#数据{对称密钥加密}#对称密钥{对方的公钥}]最后用A的公钥加密,一起发送给A

    设计算法:对称加密[数据传输快速],单项加密[完整性],单向加密[身份验证]

    身份认证:B用自己的私钥加密特征码,A用B的pkey能够解密,则认证成功

    数字签名:B用自己的私钥加密特征码的过程,就叫做数字签名

            数字签名就是为了完整身份认证

            签名:在特征码上用私钥加密就叫签名

    密钥交换:用对方的公钥加密自己生成的对称密钥,只有对方能够解密

    //对称加密的效率高,速度快,公钥加密虽然安全,但是加密速度慢,效率不高

    //之后使用对称密钥,加解密就可以了

    1.计算特征码,B用私钥加密特征码,并将结果附加到数据后面,B生成对称密钥,加密整个数据

        获取A公钥,使用对方的公钥加密对称密钥,附加到数据包后面,发送给A

        [数据|s特征码] ==&gt;对称密钥加密==&gt;{[数据|s特征码|}{ps对称密钥]

    2.A先用自己的私钥解密对称密钥:ps对称密钥

         解密 [数据|特征码]

         用对方的公钥解密 [s特征码]

         用同样的算法计算特征码 [数据]  //完整性

    注意:对称加密的对象{数据|s特征码},对称密钥是单独加密放到后面的

5.B和A通信的中间人攻击:    

    之前的bug:不能预防中间人攻击 //A---{b}-----c 

        中间人复制一份,然后实现A和c的通信

        b把自己的公钥发送给A告诉A,自己就是c

        B再把自己的公钥发送给c,告诉c自己就是A

    方案:CA:可靠的公钥获取机构 //Certificate Authority,认证授权

        证书:可以理解为公钥

    B得到A的公钥后

        1.验证证书的内容是否合法

        2.是否是受信任的CA颁发的

    ++++++++++++++++++++++++++++++++++++++++++

                CA

             /        \

            /         \

           /          \

         B    ------------A

    ++++++++++++++++++++++++++++++++++++++++++    

    PKI:以CA为中心的密钥分发:public key infrastructure

        公钥基础设施:

            签证机构:CA

            注册机构:RA

            证书吊销列表:CRL //recovery回收

            证书存取库:cdb

    X.509 v3版 //定义证书的格式和标准,以及协议标准

        版本号:证书版本

        序列号:第几个证书

        签名算法ID:用什么算法的签名

        发行者名称:CA自己的名字

        有效期限:

        主体名称:

        主体公钥:

        发行者的唯一标识:CA的唯一标识

        主体的唯一标识:

        扩展信息

        发行者的签名:CA的签名,单项加密,用自己的私钥加密

    用CA验证他人的身份

        用CA的公钥解密,CA的签名,

        用同样的加密算法,加密证书,取得特征码,与解密的特征码[签名]对比

        检查证书的有效期

        验证证书的主体名称

        检查证书是否被吊销

    证书的内容:

        有效期

        CA的签名//CA私钥加密单项加密该数据后的特征码,A获取CA的公钥,然后解密就可以

        CA会自己先给自己发证书,发给别人

        //如何获取CA的证书:

        CA的根证书,是OS自带的,MicroSoft是自带的,但是Linux是没有的,需要自带

        CA还需要有证书吊销列表

    HTTPS//相当于http调用ssl代为建立通道进行通信

    SSL通话过程:

        1.发送hello,对方回复 //协商单项加密,对称加密,公钥加密算法

        2.向server请求证书

        3.client验证证书,但是client不会发送自己的证书给server,因为有的client是没有的

            //server也是不用担心什么人来访问的

            //在网银的时候可能会用到:电子密码,U盾(个人证书)

        4.客户端使用生成随机数:对称密钥,用对方的公钥加密后发给对方

            server用这个密码加密client请求的页面,

        5.client请求断开,server确认断开,然后断开

    SSL:secure sockets layer //网警公司拥有版权,

        Netspace:1994

        google,据说有漏洞

        v1,v2.0存在漏洞,v3:1996使用了很长时间

    TLS:transport layer secure //仿照SSL,二者基本兼容,

        IETF:1999发布

        v1.0,v1.1,v1.2,v1.3:2014 //

        由于SSLv3出现了很大漏洞,因此,建议使用TLS,但是并未所有的网站都支持TLS

        分层设计:

            1.最底层:基础算法原语的实现,aes,rsa,md5等

            2.向上一层:各种算法的实现

            3.再向上一层:组合算法实现的半成品

            4.用各种组件拼装而成的各种成品密码学协议软件

    协议的开源实现:openssl

阶段:对称密钥用对方公钥加密阶段---&gt;DH算法阶段---&gt;CA阶段

    DH阶段,不能防范中间人攻击

五、SSL/TLS的实现

SSL/TLS //知识一个协议

    SSL:安全套接字层,v1,v2,v3现用

        v3也发现有缺陷,但是是主流 //网警自己开发和维护

    TLS:传输层安全,1.3,1.5 //将来很有可能为主流

实现:

    OpenSSL:

        libcrypto库:加密和解密的

        libssl库:实现ssl功能的

        openssl:命令行工具

    SSL会话主要三步:

        1.client向server索要并验证证书

        2.双方协商生成“会话密钥”

        3.双方采用"会话密钥"进行加密

SSL handshake protocol:        

    第一阶段:clientHello //第一步

        client发送支持的协议版本:比如tsl 1.2

        客户端生成一个随机数,稍后用于生成“会话密钥”

        支持的加密算法,比如AES,RSA;

        支持的压缩算算法

    第二阶段:server hello

        确认使用的加密通信协议版本,比如tls1.2;//

        服务器段生成一个随机数,稍后用于生成”会话密钥“

        确认使用的加密方法

        服务器证书;

        //索要客户端证书

    第三阶段:

        验证server证书;(发证机构、证书完整性、证书持有者、证书有效期、吊销列表)

            在确认无误后,取出其公钥

        发送以下信息给服务器端

            一个随机数:用于server上的数据加密

            编码变更通知;

            客户端握手结束通知;

    第四阶段:

        收到clinet发来的第二个随机数,会话的第三个随机数pre-master-key,计算生成本次会话所用到的“会话密钥” //避免随机数被猜测

        向客户端发送如下信息:

            编码变更通知;表示随后的信息,都将使用对方商定的加密方法和密钥发送

            服务器握手接受通知

PKI:公钥基础设施

    签证机构:CA

    注册机构:RA

    证书吊销列表:CRL

    证书存取库:cdb

    申请注册机构:威瑞信等

六、OpenSSL应用

    组件:libcrypto,libssl主要由开发者使用

    openssl:多用途命令行工具

    openssl 三类子命令

        1.标准命令

            ca

            rand //生成随机数

            rsa

            x509

            genrsa:生成rsa算法的密钥对

            gendsa:生成dsa密钥对

            req:请求签名

        2.消息摘要:dgst        

        3.ciper command:加密命令:enc

    对称加密:

        工具:openssl enc,gpg

        支持的算法:3des,aes,blowfisk,towfish

        what is enc //man enc 就可以获取帮助信息

        openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64]

            -cipername:加密算法的名称

            -a base64编码格式,不加-a使用的是二进制编码

        openssl enc -des3 -e -a -salt -in fstab -out fstab.enc

        openssl enc -des3 -d -a -salt -in fstab.enc -out fstab

        -a 不可少

        -des3 再解密的时候也不能少,否则可能会乱码

    单项加密:

        openssl dgst,gpg命令也可以md5sum,sha1sum,sha224sum

        openssl dgst -md5 fstab

        md5sum fstab

    生成密码工具

        passwd,

        whatis passwd

        man sslpasswd

        openssl passwd [-crypt] [-1] [-salt string] [-stdin]  {password}

            -1:md5

        openssl passwd -1 -salt 12345678 -stdin

    生成随机数:

        openssl rand 

        whatis rand

        man rand

        openssl rand -base64 64 //生成64位,base64编码格式的随机数

                     -hex //16进制,只有0-f

        openssl passwd -1 -salt $(openssl rand -hex 4)

    公钥加密:

        加密解密

            算法:RSA,ElGamal

            工具:openssl rsautl,gpg

        数字签名 

            算法:RSA,DSA,ELG,ELGamal

        密钥交换

            算法:DH

        公钥加密实现:

            1.openssl genrsa 1024 &gt; /tmp/a.out //生成私钥

                openssl genrsa -out /tmp/a.out 1024

                (umask 077;openssl genrsa -out /tmp/mkey.pri 1024)

                //放在括号中命令,要在子shell中运行,不会影响其他shell的运行,影响其他shell的umask

            2.提取公钥

                openssl rsa -in /tmp/mykey.pri -pubout 

                openssl rsa -in my.pk -pubout &gt; my.pub //-out也可保存

Linux系统上随机数生成器:

    /dev/random :仅从熵池返回随机数;随机数用尽,阻塞;

    /dev/urandom:从熵池返回随机数,随机数用尽,会利用软件生成伪随机数,非阻塞

伪随机数不安全

    熵池:内核维护的存储了大量的随机数,刚开始是空的

        来源:

            硬盘IO中断的时间间隔;

            键盘IO中断的时间间隔;两次击键的间隔

    方法:一旦用尽,敲键盘或者复制文件到硬盘(硬盘IO)

        CA:

            1.公共信任的CA,私有CA

            2.建立私有CA

        建立私有CA

            openssl:私有CA

            OpenCA:公有CA

        openssl配置文件

            cat /etc/pki/tls/opessl.cnf

                CA/certs:已经颁发的CA证书 $# Where the issued certs are kept

                CA/crl:证书吊销列表 

                CA/newcerts:默认新证书位置

                CA/index.txt :数据库索引文件

                CA/serial:当前序列号,已经发到第几个了

                CA/cacert.pem :CA的自签证书

                CA/crlnumber :当前证书吊销序列号

                CA/crl.pem :当前CRL

                CA/private/cakey.pem :CA的私钥

七、构建私有CA

    在确定配置为CA的服务器上生成一个自签证书,并为CA提供所需要的目录及文件即可

    1.生成私钥CA/private/cakey.pem

    (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)    

        注:cakey.pem要求默认放在CA/private中        

    2.生成自签证书:CA/certs/

        注:如果不是自签,就不需要加x509

            country name:CN

            province name:Henan

            locality:Henan

            Default Company:MingTian

            Unit Name:Ops

            Common Name:ca.mingtian.com

        openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655

            -new生成新的证书

            -x509生成自签格式证书,专用于创建私有CA时

            -key:生成请求时用到的私有文件路径

            -out:生成的请求文件路径;如果自签操作将直接生成签署过的证书

            -days:证书的有效时长,单位days

    3.提供所需的目录及文件

        mkdir /etc/pki/CA/{crl,certs,newcerts}

        touch /etc/pki/CA/{serial,index.txt}

        echo 01 &gt; /etc/pki/CA/serial

        三个目录两个文件

    请求签署证书

        1.client:192.168.4.109

            cd /etc/httpd/ssl

            (umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)

            openssl req -new -key httpd.key -out httpd.csr -days 365  //需要指定私钥-key

            csr:证书签署请求

            信息要保证和CA的一致否则,可能会出错

                Common Name:hostname //必须与客户端访问时的名字一直,否则证书验证不会通过,可以使用ip

                A challenge password://测试可以留空

        2.scp httpd.csr [email protected]:/tmp

            拷贝到CA

        3.openssl ca -in httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365 

            server签证

            cd /etc/pki/CA/

                cat index.txt //文件会增加一行内容

                serial //会变成 02

            scp /etc/pki/CA/certs/httpd.crt [email protected]:/etc/httpd/ssl/

                httpd.csr已经没有用了

        注意:只有自建CA的时候才用到/etc/pki/CA目录,CA的请求者,是不需要把私钥放在这个目录中的

八、证书签署案例

    1.用到证书的主机生成证书签署请求

        mkdir /etc/httpd/ssl

        cd /etc/httpd/ssl

        (umask 077;openssl genrsa -out httpd.key 2048)

    2.生成证书请求

        openssl req -new -key httpd.key -out httpd.csr -days 365

    3.将请求,通过可靠方式发送给ca主机

        scp 

    4.在CA主机上签署主机

        opnessl ca -in httpd.csr -out /etc/pki/certs/httpd.crt -days 365

    查看证书的信息

        openssh x509 -in httpd.crt -noout -serial -subject //只看serial和subject

        //可以使用-a

吊销证书:

<code>    </code><code>步骤(在CA上执行)</code>

<code>        </code><code>1.客户端获取要吊销的证书的serial</code>

<code>            </code><code>openssh x509 -</code><code>in</code> <code>httpd.crt -noout -serial -subject</code>

<code>        </code><code>2.CA吊销证书</code>

<code>            </code><code>先根据客户端提交的serial和subject信息,对比其与主机数据库index.txt中存储的是否一致</code>

<code>            </code><code>openssl ca -revoke /etc/pki/CA/newcerts/SERIAK.pem</code>

<code>            </code> 

<code>            </code><code>certs/httpd.crt  和 newcerts/01.pem有对应关系</code>

<code>        </code><code>3.生成证书吊销编号(第一次吊销证书时执行) </code><code>//哪怕第二次吊销的是其他的证书都不再需要做的</code>

<code>            </code><code>echo 01 &gt; /etc/pki/crlnumber </code>

<code>        </code><code>4.更新证书吊销列表</code>

<code>            </code><code>openssl ca -gencrl -</code><code>out</code> <code>thisca.crl</code>

<code>            </code><code>查看crl</code>

<code>            </code><code>opnssl crl -</code><code>in</code> <code>/paht/to/crl_file -noout -text</code>

<code>    </code><code>//到吊销ca级别的时候,将会使用openca而不是openssl</code>

openssl 指定文件,取出随机数

小结:

    1.genrsa生成私钥,rsa提取公钥,req用于自签和他签

证书查看:    

<code>    </code><code>openssl x509部分命令</code>

<code>    </code><code>打印出证书的内容:</code>

<code>    </code><code>openssl x509 -</code><code>in</code> <code>cert.pem -noout -text</code>

<code>    </code><code>打印出证书的系列号</code>

<code>    </code><code>openssl x509 -</code><code>in</code> <code>cert.pem -noout -serial</code>

<code>    </code><code>打印出证书的拥有者名字</code>

<code>    </code><code>openssl x509 -</code><code>in</code> <code>cert.pem -noout -subject</code>

<code>    </code><code>以RFC2253规定的格式打印出证书的拥有者名字</code>

<code>    </code><code>openssl x509 -</code><code>in</code> <code>cert.pem -noout -subject -nameopt RFC2253</code>

<code>    </code><code>在支持UTF8的终端一行过打印出证书的拥有者名字</code>

<code>    </code><code>openssl x509 -</code><code>in</code> <code>cert.pem -noout -subject -nameopt oneline -nameopt -escmsb</code>

<code>    </code><code>打印出证书的MD5特征参数</code>

<code>    </code><code>openssl x509 -</code><code>in</code> <code>cert.pem -noout -fingerprint</code>

<code>    </code><code>打印出证书的SHA特征参数</code>

<code>    </code><code>openssl x509 -sha1 -</code><code>in</code> <code>cert.pem -noout -fingerprint</code>

<code>    </code><code>把PEM格式的证书转化成DER格式</code>

<code>    </code><code>openssl x509 -</code><code>in</code> <code>cert.pem -inform PEM -</code><code>out</code> <code>cert.der -outform DER</code>

<code>    </code><code>把一个证书转化成CSR</code>

<code>    </code><code>openssl x509 -x509toreq -</code><code>in</code> <code>cert.pem -</code><code>out</code> <code>req.pem -signkey key.pem</code>

<code>    </code><code>给一个CSR进行处理,颁发字签名证书,增加CA扩展项</code>

<code>    </code><code>openssl x509 -req -</code><code>in</code> <code>careq.pem -extfile openssl.cnf -extensions v3_ca -signkey key.pem -</code><code>out</code>

<code></code>

本文转自MT_IT51CTO博客,原文链接:http://blog.51cto.com/hmtk520/1983793,如需转载请自行联系原作者

继续阅读