openssl命令簡介

一、 openssl簡介-指令enc node

用法:  openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e]  [-d] [-a] [-k password] [-kfile filename] [-K key] [-iv IV] [-p]  [-P] [-bufsize number] [-debug]  程序員

說明:對稱加密算法工具。它可以把數據用不一樣對稱加密算法來加/解密。還可以把加密/解密,還能夠把結果進行base64編碼。 [/b:5c505c4c1d] 算法

參數含義:app

-in filename  : 要加密/解密的輸入文件,缺省爲標準輸入。   
    -out filename  :要加密/解密的輸出文件,缺省爲標準輸出。   
    -pass arg   :    輸入文件若是有密碼保護,在這裏輸入密碼。   
    -salt  :    爲了和openssl 0.9.5之後的版本兼容,必須set這個參數,salt又是密碼學裏的一個術語。這是加密事後放在密碼最前面的一段字符串, 用途也是爲了讓破解更難dom

-nosalt   :    想和openssl 0.9.5之前的版本兼容,就set這個參數
    -e   :    一個缺省會set的option, 把輸入數據加密。   
    -d  :    解密輸入數據。   
    -a   :    用base64編碼處理數據。set了這個option表示在加密以後的數據還要用base64編碼捏一次,解密以前則先用base64編碼解碼。   
    -k password   :    一個過期了的項,爲了和之前版本兼容。如今用-key代替了。   
    -kfile filename  :    同上,被passin代替。   
    -K key  :    以16進製表示的密碼。   
    -iv IV   :   做用徹底同上。   
    -p   :    打印出使用的密碼。   
    -P  :    做用同上,但打印完以後立刻退出。   
    -bufsize number   :    設置I/O操做的緩衝區大小   
    -debug   :    打印調試信息。   
      
注意事項:   
    0.9.5之後的版本,使用這個指令,-salt是必須被set的。不然很容易用字典攻擊法破你的密碼,流加密算法也容易被破。(加密算法中有塊加密算法和流加密算法倆種,塊加密算法是一次加密固定長度的數據,通常是8Bytes, 流加密算法則加密大量數據)。爲何我也弄不清楚。研究加密算法實在麻煩,也不是咱們程序員的責任本指令能夠用不一樣加密算法,那麼哪些好,哪些壞呢?若是你使用不當,高強度的加密算法也變脆弱了。通常推薦新手門使用des3-cbc。  ide

本指令支持的加密算法   
    base64 Base 64   
    bf-cbc Blowfish in CBC mode         
     bf Alias for bf-cbc         
     bf-cfb Blowfish in CFB mode         
     bf-ecb Blowfish in ECB mode         
     bf-ofb Blowfish in OFB mode          
      
     cast-cbc CAST in CBC mode         
     cast Alias for cast-cbc        
     cast5-cbc CAST5 in CBC mode        
     cast5-cfb CAST5 in CFB mode        
     cast5-ecb CAST5 in ECB mode        
     cast5-ofb CAST5 in OFB mode  工具

des-cbc DES in CBC mode        
     des Alias for des-cbc         
     des-cfb DES in CBC mode  
      des-ofb DES in OFB mode         
     des-ecb DES in ECB mode               
     des-ede-cbc Two key triple DES EDE in CBC mode         
     des-ede Alias for des-ede         
     des-ede-cfb Two key triple DES EDE in CFB mode         
     des-ede-ofb Two key triple DES EDE in OFB mode              
      
     des-ede3-cbc Three key triple DES EDE in CBC mode         
     des-ede3 Alias for des-ede3-cbc         
     des3 Alias for des-ede3-cbc         
     des-ede3-cfb Three key triple DES EDE CFB mode         
     des-ede3-ofb Three key triple DES EDE in OFB mode         
      desx DESX algorithm.         
      idea-cbc IDEA algorithm in CBC mode         
     idea same as idea-cbc         
     idea-cfb IDEA in CFB mode         
     idea-ecb IDEA in ECB mode         
     idea-ofb IDEA in OFB mode                
      
     rc2-cbc 128 bit RC2 in CBC mode         
     rc2 Alias for rc2-cbc         
     rc2-cfb 128 bit RC2 in CBC mode         
     rc2-ecb 128 bit RC2 in CBC mode         
     rc2-ofb 128 bit RC2 in CBC mode         
     rc2-64-cbc 64 bit RC2 in CBC mode         
     rc2-40-cbc 40 bit RC2 in CBC mode         
           
     rc4 128 bit RC4         
     rc4-64 64 bit RC4         
     rc4-40 40 bit RC4         
           
     rc5-cbc RC5 cipher in CBC mode         
     rc5 Alias for rc5-cbc         
     rc5-cfb RC5 cipher in CBC mode         
     rc5-ecb RC5 cipher in CBC mode         
     rc5-ofb RC5 cipher in CBC mode         
    你們可能看到DES都分des-ecb, des-cbc, des-cfb這些。簡單解釋一下。   
    ecb就是說每來8bytes,就加密8bytes送出去。各個不一樣的數據塊之間沒有任何聯繫。cbc和cfb則每次加密一個8bytes的時候都和上一個8bytes加密的結果有一個運算法則。各個數據塊之間是有聯繫的。   
    舉例時間:   
    把某二進制文件轉換成base64編碼方式:   
    openssl base64 -in file.bin -out file.b64   
    把某base64編碼文件轉換成二進制文件。   
    openssl base64 -d -in file.b64 -out file.bin   
    把某文件用DES-CBC方式加密。加密過程當中會提示你輸入保護密碼。   
      
     openssl des3 -salt -in file.txt -out file.des3   
    解密該文件, 密碼經過-k來輸入   
    openssl des3 -d -salt -in file.des3 -out file.txt -k mypassword   
    加密某文件,而且把加密結果進行base64編碼。用bf+cbc算法加密   
    openssl bf -a -salt -in file.txt -out file.bf   
    先用base64解碼某文件,再解密   
    openssl bf -d -salt -a -in file.bf -out file.txt測試

 

二、 openssl簡介-指令gendsa ui

用法:this

openssl gendsa [-out filename] [-des] [-des3] [-idea] [-rand file(s)] [paramfile]  

描述: 

 本指令由DSA參數來產生DSA的一對密鑰。dsa參數能夠用dsaparam來產生。[/b:3ff9640d43]  

 OPTIONS   
    -des|-des3|-idea  :採用什麼加密算法來加密咱們的密鑰。通常會要你輸入保護密碼。若是這三個中一個也沒set, 咱們的密鑰將不被加密而輸入。   
    -rand file(s)  : 產生key的時候用過seed的文件,能夠把多個文件用冒號分開一塊兒作seed.   
    paramfile  :    指定使用的DSA參數文件。

 

三、 openssl簡介-指令genrsa 

用法:  

 openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea]  [-f4] [-3] [-rand file(s)] [numbits]  

描述:生成RSA私有密鑰的工具。[/b:e2fe605c7d]  

OPTIONS   
    -out filename  : 私有密鑰輸入文件名,缺省爲標準輸出。   
    the output filename. If this argument is not specified then standard output is uused.   
    -passout arg   : 參看指令dsa裏面的passout參數說明   
    -des|-des3|-idea :  採用什麼加密算法來加密咱們的密鑰。通常會要你輸入保護密碼。 若是這三個中一個也沒set, 咱們的密鑰將不被加密而輸入。   
    -F4|-3  :使用的公共組件,一種是3, 一種是F4, 我也沒弄懂這個option是什麼意思。   
    -rand file(s)  : 產生key的時候用過seed的文件,能夠把多個文件用冒號分開一塊兒作seed.   
    numbits   :指明產生的參數的長度。必須是本指令的最後一個參數。若是沒有指明,則產生512bit長的參數。   
    研究過RSA算法的人確定知道,RSA的私有密鑰其實就是三個數字,其中倆個是質數。這倆個呢,就叫prime numbers.產生RSA私有密鑰的關鍵就是產生這倆。還有一些其餘的參數,引導着整個私有密鑰產生的過程。由於產生私有密鑰過程須要不少隨機數,這個過程的時間是不固定的。   
    產生prime numbers的算法有個bug, 它不能產生短的primes. key的bits起碼要有64位。通常咱們都用1024bit的key.

 

四、  openssl簡介-指令passwd 

   用法: openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin]  [-quiet] [-table] {password}  

說明: 本指令計算用來哈希某個密碼,也能夠用來哈希文件內容。[/b:da40679049]   
    本指令支持三種哈希算法:   
    UNIX系統的標準哈希算法(crypt)   
    MD5-based BSD(1)  

OPTIONS   
   -crypt -1 -apr1 : 這三個option中任意選擇一個做爲哈希算法,缺省的是-crypt   
    -salt string   :  輸入做爲salt的字符串。   
    -in file  :    要哈希的文件名稱   
    -stdin  :    從標準輸入讀入密碼   
    -quiet   :    當從標準輸入讀密碼,輸入的密碼太長的時候,程序將自動解短它。這個option的 set將不在狀況下發出警告。   
    -table  :    在輸出列的時候,先輸出明文的密碼,而後輸出一個TAB,再輸出哈希值.   
    舉例時間:   
    openssl passwd -crypt -salt xx password xxj31ZMTZzkVA.   
    openssl passwd -1 -salt xxxxxxxx password $1$xxxxxxxx$8XJIcl6ZXqBMCK0qFevqT1.   
    openssl passwd -apr1 -salt xxxxxxxx password $apr1$xxxxxxxx$dxHfLAsjHkDRmG83UXe8K0

 

五、 openssl簡介-指令pkcs7 

用法:   
    openssl pkcs7 [-inform PEM|DER] [-outform PEM|DER] [-in filename]  [-out filename] [-print_certs] [-text] [-noout]  

 說明:     處理PKCS#7文件的工具, [/b:6d30603c82] 

-inform DER|PEM  :指定輸入的格式是DEM仍是DER. DER格式採用ASN1的DER標準格式。通常用的多的都是PEM格式,就是base64編碼格式.你去看看你作出來的那些.key, .crt文件通常都是PEM格式的,第一行和最後一行指明內容,中間就是通過編碼的東西。  

-outform DER|PEM  :    和上一個差很少,不一樣的是指定輸出格式   
    -in filename  :    要分析的文件名稱, 缺省是標準輸入.   
    -out filename   :    要輸出的文件名, 缺省是標準輸出.write to or standard output by default.   
    -print_certs   :    打印出該文件內的任何證書或者CRL.   
    -text   :    打印出證書的細節.   
    -noout  :    不要打印出PKCS#7結構的編碼版本信息.   
    舉例時間:   
    把一個PKCS#7文件從PEM格式轉換成DER格式   
    openssl pkcs7 -in file.pem -outform DER -out file.der   
    打印出文件內全部的證書   
    openssl pkcs7 -in file.pem -print_certs -out certs.pem   
    PCKS#7 文件的開始和結束倆行是這樣子的:   
    -----BEGIN PKCS7-----   
    -----END PKCS7-----   
    爲了和某些猥瑣CA兼容,這樣子的格式也能夠接受   
    -----BEGIN CERTIFICATE-----   
    -----END CERTIFICATE-----   
    好象咱們尚未解釋pkcs#7是什麼東西. 有興趣的能夠看看rfc2315, 估計看完目錄尚未陣亡的同窗不會超過1/10.

 

六、  openssl簡介-指令rand 

用法:  openssl rand [-out file] [-rand file(s)] [-base64] num  

描述:     用來產生僞隨機字節. 隨機數字產生器須要一個seed, 先已經說過了,在沒有/dev/srandom系統下的解決方法是本身作一個~/.rnd文件.若是該程序能讓隨機數字產生器很滿意的被seeded,程序寫回一些怪怪的東西回該文件. [/b:55d4e97ab2] 

-out file  :   輸出文件.   
   -rand file(s)  :   產生隨機數字的時候用過seed的文件,能夠把多個文件用冒號分開一塊兒作seed.   
   -base64  :   對產生的東西進行base64編碼   
   num   :  指明產生多少字節隨機數.

 

七、  openssl簡介-指令req 

用法:   openssl req [-inform PEM|DER] [-outform PEM|DER] [-in filename]  [-passin arg] [-out filename] [-passout arg] [-text] [-noout][-verify] [-modulus] [-new] [-rand file(s)] [-newkey rsa:bits]  [-newkey dsa:file] [-nodes] [-key filename] [-keyform PEM|DER][-keyout filename] [-[md5|sha1|md2|mdc2]] [-config filename]  [-x509] [-days n] [-asn1-kludge] [-newhdr] [-extensions section]  [-reqexts section] 

描述: 本指令用來建立和處理PKCS#10格式的證書.它還可以創建自簽名證書,作Root CA. [/b:866f672f5a] 

 -inform DER|PEM  :    指定輸入的格式是DEM仍是DER. DER格式採用ASN1的DER標準格式。通常用的多的都是PEM格式,就是base64編碼格式.你去看看你作出來的那些.key, .crt文件通常都是PEM格式的,第一行和最後一行指明內容,中間就是通過編碼的東西。 

    -outform DER|PEM :    和上一個差很少,不一樣的是指定輸出格式  

    -in filename  :    要處理的CSR的文件名稱,只有-new和-newkey倆個option沒有被set,本option纔有效  

    -passin arg  :    去看看CA那一章關於這個option的解釋吧。 

     -out filename :    要輸出的文件名  

    -passout arg  :    參看dsa指令裏的passout這個option的解釋吧.  

   -text  :   將CSR文件裏的內容以可讀方式打印出來  

    -noout   :    不要打印CSR文件的編碼版本信息.  

    -modulus  :    將CSR裏面的包含的公共米要的係數打印出來.  

    -verify  :  檢驗請求文件裏的簽名信息. 

    -new  :    本option產生一個新的CSR, 它會要用戶輸入建立CSR的一些必須的信息.至於須要哪些信息,是在config文件裏面定義好了的.若是-key沒有被set, 那麼就將根據config文件裏的信息先產生一對新的RSA密鑰  

    -rand file(s)  :    產生key的時候用過seed的文件,能夠把多個文件用冒號分開一塊兒作seed.  

-newkey arg :    同時生成新的私有密鑰文件和CSR文件. 本option是帶參數的.若是是產生RSA的私有密鑰文件,參數是一個數字, 指明私有密鑰bit的長度. 若是是產生DSA的私有密鑰文件,參數是DSA密鑰參數文件的文件名.  

    -key filename   :    參數filename指明咱們的私有密鑰文件名.容許該文件的格式是PKCS#8.  

    -keyform DER|PEM :    指定輸入的私有密鑰文件的格式是DEM仍是DER. DER格式採用ASN1的DER標準格式。通常用的多的都是PEM格式,就是base64編碼格式.你去看看你作出來的那些.key, .crt文件通常都是PEM格式的,第一行和最後一行指明內容,中間就是通過編碼的東西。

 -outform DER|PEM   :    和上一個差很少,不一樣的是指定輸出格式  

    -keyform PEM|DER :    私有密鑰文件的格式, 缺省是PEM  

    -keyout filename  :    指明建立的新的私有密鑰文件的文件名. 若是該option沒有被set, 將使用config文件裏面指定的文件名. 

    -nodes   :    本option被set的話,生成的私有密鑰文件將不會被加密.  

    -[md5|sha1|md2|mdc2]  :    指明簽發的證書使用什麼哈希算法.若是沒有被set, 將使用config文件裏的相應item的設置. 但DSA的CSR將忽略這個option, 而採用SHA1哈希算法.  

    -config filename   :    使用的config文件的名稱. 本option若是沒有set, 將使用缺省的config文件. 

    -x509  :    本option將產生自簽名的證書. 通常用來錯測試用,或者本身玩下作個Root CA.證書的擴展項在 config文件裏面指定. 

   -days n   :   若是-509被set, 那麼這個option的參數指定咱們本身的CA給人家簽證書的有效期.缺省是30天.  

-extensions section -reqexts section   :    這倆個option指定config文件裏面的與證書擴展和證書請求擴展有關的倆個section的名字(若是-x509這個option被set).這樣你能夠在config文件里弄幾個不一樣的與證書擴展有關的section, 而後爲了避免同的目的給CSR簽名的時候指明不一樣的section來控制簽名的行爲.  

-asn1-kludge  :    缺省的req指令輸出徹底符合PKCS10格式的CSR, 但有的CA僅僅接受一種非正常格式的CSR, 這個option的set就能夠輸出那種格式的CSR. 要解釋這倆種格式有點麻煩, 須要用到ASN1和PKCS的知識,並且如今這樣子怪的CA幾乎沒有,因此省略解釋  

-newhdr   : 在CSR問的第一行和最後一行中加一個單詞"NEW", 有的軟件(netscape certificate server)和有的CA就有這樣子的怪癖嗜好.若是那些必需要的option的參數沒有在命令行給出,那麼就會到config文件裏去查看是否有缺省值, 而後時候。config文件中相關的一些KEY的解釋與本指令有關的KEY都在[req]這個section裏面.  

 input_password output_password   :私有密鑰文件的密碼和把密碼輸出的文件名.同指令的passin, passout的意義相同.  

    default_bits  :    指定產生的私有密鑰長度, 若是爲空,那麼就用512.只有-new被set, 這個設置才起做用,意義同-newkey相同. 

    default_keyfile  :    指定輸出私有密鑰文件名,若是爲空, 將輸出到標準輸入,意義同-keyout相同.  

    oid_file  :    oid_section    與oid文件有關的項, oid不清楚是什麼東西來的.   
    RANDFILE   
    產生隨機數字的時候用過seed的文件,能夠把多個文件用冒號分開一塊兒作seed.   
    encrypt_key   
    若是本KEY設置爲no, 那麼若是生成一個私有密鑰文件,將不被加密.同命令行的-nodes的意義相同.   
    default_md   
    指定簽名的時候使用的哈希算法,缺省爲MD5. 命令行裏有一樣的功能輸入.   
    string_mask   
    屏蔽掉某些類型的字符格式. 不要亂改這個KEY的值!!有的字符格式netscape不支持,因此亂改這個KEY很危險.   
    req_extensions   
    指明證書請求擴展section, 而後由那個secion指明擴展的特性. openssl的缺省config文件裏, 擴展的是X509v3, 不擴展的是x509v1.這個KEY的意義和命令行裏-reqexts相同.   
    x509_extensions   
    同命令行的-extension的意義相同.指明證書擴展的sesion, 由那個section指明證書擴展的特性.   
    prompt   
    若是這個KEY設置爲no, 那麼在生成證書的時候須要的那些信息將從config文件裏讀入,而不是從標準輸入由用戶去輸入, 同時改變下倆個KEY所指明的section的格式.   
    attributes   
    一個過期了的東西, 不知道也罷. 不過它的意義和下一個KEY有點相似,   
    格式則徹底相同. 

distinguished_name   
   指定一個section, 由那個section指定在生成證書或者CRS的時候須要的資料.該section的格式以下:   
    其格式有倆種, 若是KEY prompt被set成no(看看prompt的解釋), 那麼這個secion的格式看起來就是這樣子的:   
     CN=My Name   
    OU=My Organization   
    emailAddress=someone@somewhere.org   
    就說只包括了字段和值。這樣子能夠可讓其餘外部程序生成一個摸板文件,包含全部字段和值, 把這些值提出來.等下舉例時間會有詳細說明.若是prompt沒有被set成no, 那麼這個section的格式則以下:   
    fieldName="please input ur name"        
     fieldName_default="fordesign"         
     fieldName_min= 3         
     fieldName_max= 18         
    "fieldname"就是字段名, 好比commonName(或者CN). fieldName(本例中是"prompt")是用來提示用戶輸入相關的資料的.若是用戶什麼都不輸, 那麼就使用確省值.若是沒有缺省值, 那麼該字段被忽略.用戶若是輸入 ’.’ ,也可讓該字段被忽略.   
    用戶輸入的字節數必須在fieldName_min和fieldName_max之間. 不一樣的section還可能對輸入的字符有特殊規定,好比必須是可打印字符.那麼在本例裏面, 程序的表現將以下:   
    首先把fieldName打印出來給用戶以提示   
    please input ur name:   
    以後若是用戶必須輸入3到18之間的一個長度的字符串, 若是用戶什麼也不輸入,那麼就把fieldName_default裏面的值"fordesign"做爲該字段的值添入.   
    有的字段能夠被重複使用.這就產生了一個問題, config文件是不容許一樣的section文件裏面有多於一個的相同的key的.其實這很容易解決,好比把它們的名字分別叫作"1.organizationName", "2.organizationName"   
    openssl在編譯的時候封裝了最必須的幾個字段, 好比commonName, countryName, localityName, organizationName,organizationUnitName, stateOrPrivinceName還增長了emailAddress surname, givenName initials 和 dnQualifier.   
    舉例時間:   
    就使用確省值.若是沒有缺省值, 那麼該字段被忽略.用戶若是輸入 ’.’ ,也可讓該字段被忽略.用戶輸入的字節數必須在fieldName_min和fieldName_max之間. 不一樣的section還可能對輸入的字符有特殊規定,好比必須是可打印字符.那麼在本例裏面, 程序的表現將以下:   
    首先把fieldName打印出來給用戶以提示   
    please input ur name:   
    以後若是用戶必須輸入3到18之間的一個長度的字符串, 若是用戶什麼也不輸入,那麼就把fieldName_default裏面的值"fordesign"做爲該字段的值添入.   
    有的字段能夠被重複使用.這就產生了一個問題, config文件是不容許一樣的section文件裏面有多於一個的相同的key的.其實這很容易解決,好比把它們的名字分別叫作"1.organizationName", "2.organizationName" openssl在編譯的時候封裝了最必須的幾個字段,好比commonName,countryName,localityName, organizationName,organizationUnitName, stateOrPrivinceName還增長了emailAddress surname, givenName initials 和 dnQualifier.   
    舉例時間:   
    Examine and verify certificate request:   
    檢查和驗證CSR文件.   
    openssl req -in req.pem -text -verify -noout   
    作本身的私有密鑰文件, 而後用這個文件生成CSR文件.   
    openssl genrsa -out key.pem 1024   
    openssl req -new -key key.pem -out req.pem   
    也能夠一步就搞定:   
    openssl req -newkey rsa:1024 -keyout key.pem -out req.pem   
    作一個自簽名的給Root CA用的證書:   
    openssl req -x509 -newkey rsa:1024 -keyout key.pem -out crt.pem   
    下面是與本指令有關的config文件中相關的部分的一個例子:   
    [ req ]   
    default_bits = 1024   
    default_keyfile = privkey.pem   
    distinguished_name = req_distinguished_name   
    attributes = req_attributes   
    x509_extensions = v3_ca   
    dirstring_type = nobmp   
    [ req_distinguished_name ]   
    countryName = Country Name (2 letter code)   
    countryName_default = AU   
    countryName_min = 2   
    countryName_max = 2   
    localityName = Locality Name (eg, city)   
    organizationalUnitName = Organizational Unit Name (eg, section)   
    commonName = Common Name (eg, YOUR name)   
    commonName_max = 64   
    emailAddress = Email Address   
    emailAddress_max = 40   
    [ req_attributes ]   
    challengePassword = A challenge password   
    challengePassword_min = 4   
    challengePassword_max = 20   
     [ v3_ca ]   
     subjectKeyIdentifier=hash   
    authorityKeyIdentifier=keyid:always,issuer:always   
    basicConstraints = CA:true   
    RANDFILE = $ENV::HOME/.rnd   
    [ req ]   
    default_bits = 1024   
    default_keyfile = keyfile.pem   
    distinguished_name = req_distinguished_name   
    attributes = req_attributes   
    prompt = no   
    output_password = mypass   
    [ req_distinguished_name ]   
    C = GB   
    ST = Test State or Province   
    L = Test Locality   
    O = Organization Name   
    OU = Organizational Unit Name   
    CN = Common Name   
    emailAddress = test@email.address   
    [ req_attributes ]   
    challengePassword = A challenge password   
    通常的PEM格式的CSR文件的開頭和結尾一行以下   
    -----BEGIN CERTIFICATE REQUEST----   
    -----END CERTIFICATE REQUEST----   
    但個把變態軟件和CA硬是須要CSR的文件要這樣子:   
    -----BEGIN NEW CERTIFICATE REQUEST----   
    -----END NEW CERTIFICATE REQUEST----   
    用-newhdr就能夠啦, 或者你本身手工加也中.openssl對倆種格式都認可.   
    openssl的config文件也能夠用環境變量OPENSSL_CONF或者SSLEAY_CONF來指定.

 

八、 openssl簡介-指令rsa 

用法  

    openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename]  [-passin arg] [-out filename] [-passout arg] [-sgckey] [-des] [-des3]  [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout]  

說明:  rsa指令專門處理RSA密鑰.其實其用法和dsa的差很少. [/b:ac3cf3a933] 

 -inform DER|PEM|NET :    指定輸入的格式是DEM仍是DER仍是NET.注意, 這裏多了一種格式,就是NET,DER格式採用ASN1的DER標準格式。通常用的多的都是PEM格式,就是base64編碼格式.你去看看你作出來的那些.key, .crt文件通常都是PEM格式的,第一行和最後一行指明內容,中間就是通過編碼的東西。NET格式在本章後面會詳細解釋.   
    -outform DER|PEM|NET   
    和上一個差很少,不一樣的是指定輸出格式   
    -in filename   :    要分析的文件名稱。若是文件有密碼保護,會要你輸入的.   
    -passin arg  :    去看看CA那一章關於這個option的解釋吧。   
    -out filename   :    要輸出的文件名。   
    -passout arg   :    沒什麼用的一個選項,用來把保護key文件的密碼輸出的,意義和passin差很少。   
    -sgckey  :    配合NET格式的私有密鑰文件的一個option, 沒有必要去深刻知道了。   
    -des|-des3|-idea  :    指明用什麼加密算法把咱們的私有密鑰加密。加密的時候會須要咱們輸入密碼來保護該文件的。若是這仨一個都沒有選,那麼你的私有密鑰就以明文寫進你的key文件。該選項只能輸出PEM格式的文件。   
    -text   :    打印出私有密鑰的各個組成部分.   
    -noout   :    不打印出key的編碼版本信息。   
    -modulus :    把其公共密鑰的值也打印出來   
    -pubin   :    缺省的來講是從輸入文件裏讀到私有密鑰,這個就能夠從輸入文件裏去讀公共密鑰.   
    -pubout  :    缺省的來講是打印出私有密鑰,這個就能夠打印公共密鑰.若是上面那個選項有set那麼這個選項也自動被set.   
    -check  :    檢查RSA的私有密鑰是否被破壞了這個指令實在和dsa太類似了。copy的我手軟。   
    如今解釋一下NET是一種什麼格式。它是爲了和老的netscape server以及IIS兼容才弄出來的。他使用沒有被salt過的RC4作加密算法,加密強度很底,若是不是必定要用就別用。   
    舉例時間:   
    把RSA私有密鑰文件的保護密碼去掉(最好別這麼作)   
    openssl rsa -in key.pem -out keyout.pem   
    用DES3算法加密咱們的私有密碼文件:   
    openssl rsa -in key.pem -des3 -out keyout.pem   
    把一個私有密鑰文件從PEM格式轉化成DER格式:   
    openssl rsa -in key.pem -outform DER -out keyout.der   
    把私有密鑰的全部內容詳細的打印出來:   
    openssl rsa -in key.pem -text -noout   
    只打印出公共密鑰部分:   
    openssl rsa -in key.pem -pubout -out pubkey.pem

九、  openssl簡介-指令rsautl 

用法:  openssl rsautl [-in file] [-out file] [-inkey file] [-pubin] [-certin] [-sign] [-verify] [-encrypt] [-decrypt] [-pkcs] [-ssl] [-raw] [-hexdump] [-asn1parse]  

描述: 本指令可以使用RSA算法簽名,驗證身份, 加密/解密數據。[/b:86b8dd1e33] 

 -in filename :    指定輸入文件名。缺省爲標準輸入。       -out filename   :    指定輸入文件名, 缺省爲標準輸出。       -inkey file  :    指定咱們的私有密鑰文件, 格式必須是RSA私有密鑰文件。       -pubin  :  指定咱們的公共密鑰文件。說真的我還真不知道RSA的公共密鑰文件有什麼用,通常公共密鑰都是放在證書裏面的。       -certin  :指定咱們的證書文件了。       -sign   :    給輸入的數據簽名。須要咱們的私有密鑰文件。       -verify  :    對輸入的數據進行驗證。       -encrypt  :    用咱們的公共密鑰對輸入的數據進行加密。       -decrypt  :    用RSA的私有密鑰對輸入的數據進行解密。       -pkcs, -oaep, -ssl, -raw  :   採用的填充模式, 上述四個值分別表明:PKCS#1.5(缺省值), PKCS#1 OAEP, SSLv2裏面特定的填充模式,或者不填充。若是要簽名,只有-pkcs和-raw可使用.       -hexdump   :    用十六進制輸出數據。       -asn1parse  :    對輸出的數據進行ASN1分析。看看指令asn1parse吧。該指令通常和-verify一塊兒用的時候威力大。       本指令加密數據的時候只能加密少許數據,要加密大量數據,估計要調API.我也沒試過寫RSA加密解密的程序來玩。       舉例時間:       用私有密鑰對某文件簽名:       openssl rsautl -sign -in file -inkey key.pem -out sig       注意哦, 文件真的不能太大, 這個不能太大意思是必須很小。  文件大小最好不要大過73。絕對不能多過150,多了就會出錯。       這個工具真是用來玩的 對簽名過的數據進行驗證,獲得原來的數據。       openssl rsautl -verify -in sig -inkey key.pem       檢查原始的簽名過的數據:       openssl rsautl -verify -in sig -inkey key.pem -raw -hexdump             0000 - 00 01 ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................             0010 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................             0020 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................             0030 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................             0040 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................             0050 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................             0060 - ff ff ff ff ff ff ff ff-ff ff ff ff ff ff ff ff ................             0070 - ff ff ff ff 00 68 65 6c-6c 6f 20 77 6f 72 6c 64 .....hello world       很明顯,這是PKCS#1結構:使用0xff填充模式。       配合指令asn1parse,能夠分析簽名的證書,咱們在req指令裏說了怎麼作自簽名的證書了,如今來分析一下先。       openssl asn1parse -in pca-cert.pem            0:d=0 hl=4 l= 742 cons: SEQUENCE             4:d=1 hl=4 l= 591 cons: SEQUENCE             8:d=2 hl=2 l= 3 cons: cont [ 0 ]             10:d=3 hl=2 l= 1 prim: INTEGER :02             13:d=2 hl=2 l= 1 prim: INTEGER :00             16:d=2 hl=2 l= 13 cons: SEQUENCE             18:d=3 hl=2 l= 9 prim: OBJECT :md5WithRSAEncryption             29:d=3 hl=2 l= 0 prim: NULL            31:d=2 hl=2 l= 92 cons: SEQUENCE             33:d=3 hl=2 l= 11 cons: SET             35:d=4 hl=2 l= 9 cons: SEQUENCE             37:d=5 hl=2 l= 3 prim: OBJECT :countryName             42:d=5 hl=2 l= 2 prim: PRINTABLESTRING :AU             ....             599:d=1 hl=2 l= 13 cons: SEQUENCE             601:d=2 hl=2 l= 9 prim: OBJECT :md5WithRSAEncryption             612:d=2 hl=2 l= 0 prim: NULL             614:d=1 hl=3 l= 129 prim: BIT STRING            最後一行BIT STRING就是實際的簽名。咱們能夠這樣子捏它出來:       openssl asn1parse -in pca-cert.pem -out sig -noout -strparse 614      還能夠這樣子把公共密鑰給弄出來:       openssl x509 -in test/testx509.pem -pubkey&nb, sp;-noout >pubkey.pem       咱們也能夠這樣子分析簽名:       openssl rsautl -in sig -verify -asn1parse -inkey pubkey.pem -pubin       0:d=0 hl=2 l= 32 cons: SEQUENCE             2:d=1 hl=2 l= 12 cons: SEQUENCE             4:d=2 hl=2 l= 8 prim: OBJECT :md5             14:d=2 hl=2 l= 0 prim: NULL             16:d=1 hl=2 l= 16 prim: OCTET STRING             0000 - f3 46 9e aa 1a 4a 73 c9-37 ea 93 00 48 25 08 b5 .F...Js.7...H%..            這是通過分析後的ASN1結構。能夠看出來使用的哈希算法是md5. (很抱歉,我本身試這一行的時候輸出結果卻徹底不一樣。       0:d=0 hl=2 l= 120 cons: appl [ 24 ]       length is greater than 18       徹底沒有辦法看出那裏有寫哈希算法。)  證書裏面的簽名部分能夠這麼捏出來:       openssl asn1parse -in pca-cert.pem -out tbs -noout -strparse 4       這樣獲得他的哈希算法的細節:       openssl md5 -c tbs       MD5(tbs)= f3:46:9e:aa:1a:4a:73:c9:37:ea:93:00:48:25:08:b5

相關文章
相關標籤/搜索