天天看點

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,如需轉載請自行聯系原作者

繼續閱讀