伴隨着計算機的發展,計算機的安全問題也一直困擾着咱們,在現代社會計算機信息安全更顯得格外的重要,現在的社會是一個信息的社會,你我天天都在使用計算機,隨着電子郵件、社區網遊、即便通信、電子商務等應用的發展,咱們的私人信息也在經過各類網絡設備在互聯網上被傳遞,如何才能保障這些私人信息的安全是咱們所要關心的。 node
對重要的數據如銀行賬號咱們可使用加密技術加密咱們的數據,而後再經過網絡傳遞這些信息,現代加密技術一般被分爲:對稱加密技術和對對稱加密技術。 算法
其中對稱加密技術的特色是: 數據庫
1.加密與解密使用的是同一把鑰匙; 安全
2.由加密密鑰能夠推到出解密密鑰,有解密密鑰一樣能夠推斷出加密密鑰; 網絡
3.數據加密速度相對非對稱加密技術較快。 dom
非對稱加密技術的特色是: ide
1.加密與解密使用兩把不一樣的鑰匙; 工具
2.經過加密密鑰不可能(有效時間內)推到出解密密鑰,由解密密鑰也不可能(有效時間內)推到出加密密鑰; ui
3.與對稱加密技術相比數據加密速度較慢。 編碼
注:公鑰用來加密,私鑰用來解密,公鑰能夠公開到互聯網上被任何人使用,由於經過公鑰沒法推導出私鑰。
由此咱們可能很快就會判斷咱們須要對稱加密技術加密咱們在互聯網中的數據,由於她簡單且速度很快。若是你真的選擇了這種解決方案,你會發現另外的一個很是嚴重的問題。即:若是互聯網上通信雙方要想彼此通信的話,就必需要提起協商一個加密與解密的密鑰才能夠,那麼你的密鑰要如何經過網絡傳遞出去呢?若是使用加密傳遞出去,可是對方並不知道解密的方法,若是使用明文傳遞密鑰,而此時正好有一名黑客經過互聯網監聽你的信息,那麼這名監聽者一樣得到了以的密鑰,這不是很可怕!
此時咱們的一個合理的解決方案是:使用;非對稱加密技術加密咱們準備使用的對稱加密的密鑰,即:使用非對稱加密技術的公鑰加密咱們準備要使用的對稱加密技術的密鑰,對方收到後再使用私密解密,這樣雙方都有了對稱加密的密鑰,快速的加密咱們的數據,而加密真是數據用的很是重要的密鑰;因爲是使用非對稱加密技術傳輸的因此也一樣的安全!
到此咱們的問題好像是都解決了,咱們先假設一個環境:愛麗絲如今須要和鮑勃經過網絡溝通公司的機密信息。按照咱們知道的,愛麗絲如今須要一把密鑰加密公司的機密文件,而鮑勃若是想打開該文件的話一樣須要這把密鑰。因而愛麗絲生成了一把對稱加密技術的密鑰,用來加密公司數據文件,同時爲了讓鮑勃能夠閱讀該文件,愛麗絲須要鮑勃生成一對非對稱的公鑰和私鑰密鑰對,鮑勃把本身的公鑰發給愛麗絲,因而愛麗絲使用鮑勃發來的公鑰加密了本身用來加密公司文件的對稱密鑰,同時把使用對稱加密技術加密後的文件發給了鮑勃,鮑勃接受到文件後,先使用本身的私鑰解密;愛麗絲的用於機密公司文件的密鑰,而後使用解密除了的密鑰;解密公司文件。看上去很完美!
如何在互聯網上有一名不懷好意者,他本身也生成了一對非對稱密鑰,或偷取了鮑勃的非對稱密鑰,並把公鑰發給愛麗絲,並聲稱本身是鮑勃,結果會怎麼樣呢?
很顯然,咱們沒有辦法知道互聯網上某個公鑰或私鑰是否就是該持有人的真實身份。證書就是用來創建持有人與證書直接關係的技術。就想咱們的身份證,身份證對應你本人,你本人一樣對應這惟一的身份證,若是有誰懷疑的話,能夠去公安機關去證明這個身份證的真僞!(完美)
要想使用證書咱們這裏須要幾個關鍵因素:
1.驗證機構(CA認證機構),這裏CA是一個權威的機構。
2.實體我的(私鑰,僅我的持有)
3.驗證機制。
流程:我的生成密鑰對,用戶把本身的信息與公鑰一塊兒發給CA機構驗證,申請屬於本身的證書,當證書經過申請後便可在互聯網上使用該證書。
OpenSSL提供了創建證書所須要的全部命令:req命令是證書申請工具。ca命令用於接受證書請求、審覈證書請求、簽發證書、吊銷證書等管理證書的工具命令。
下面咱們分別來看看這兩個命令的使用:
1、證書請求:req
req [options] infile outfile
where options are
-inform arg input format - DER or PEM (輸入證書請求文件的格式,DER或PEM格式,輸入證書請求文件的目的是驗證證書或顯示證書內容)
-outform arg output format - DER or PEM (輸出證書請求或自簽名證書編碼格式)
-in arg input file (輸入一個已經存在的證書請求文件,能夠配合x509選擇生成自簽名證書)
-out arg output file (輸出文件名,能夠輸出證書請求、自簽名證書、公鑰等)
-text text form of request (輸出證書請求或自簽名根證書的明文內容,默認狀況下將輸出全部的明文信息)
-pubkey output public key (輸出公鑰到out選項指定的文件中)
-noout do not output REQ (不輸出任何信息到文件)
-verify verify signature on REQ (對證書請求的數字簽名進行驗證)
-modulus RSA modulus
-nodes don't encrypt the output key (不加密輸出的密鑰)
-engine e use engine e, possibly a hardware device (使用第三方設備加密設備)
-subject output the request's subject (輸出主機名信息)
-passin private key password source (讀取私鑰文件所須要的口令)
-key file use the private key contained in file (指定一個已存在的私鑰文件)
-keyform arg key file format (指定密鑰文件格式)
-keyout arg file to send the key to (私鑰輸出文件名)
-rand file:file:... (隨機數文件)
load the file (or the files in the directory) into
the random number generator
-newkey rsa:bits generate a new RSA key of 'bits' in size (生成新的密鑰,RSA表明使用RSA算法對密鑰進行加密,bits表示密鑰長度)
-newkey dsa:file generate a new DSA key, parameters taken from CA in 'file' (生成新的密鑰,DSA表明使用DSA算法對密鑰進行加密,bits表示密鑰長度)
-[digest] Digest to sign with (md5, sha1, md2, mdc2, md4) (使用信息摘要算法,通常在數字簽名時使用)
-config file request template file. (指定證書請求時所需的OpenSSL配置文件)
-subj arg set or modify request subject (經過命令行輸入用戶信息)
-multivalue-rdn enable support for multivalued RDNs
-new new request. (執行新的證書請求操做)
-batch do not ask anything during request generation (生成證書請求時不提示輸入任何信息)
-x509 output a x509 structure instead of a cert. req. (輸出x509結構的自簽名根證書)
-days number of days a certificate generated by -x509 is valid for. (x509證書的有效期)
-set_serial serial number to use for a certificate generated by -x509. (設置x509證書的序列號)
-newhdr output "NEW" in the header lines (在證書請求行首輸入NEW字段)
-asn1-kludge Output the 'request' in a format that is wrong but some CA's
have been reported as requiring
-extensions .. specify certificate extension section (override value in config file) (特殊的證書擴展字段)
-reqexts .. specify request extension section (override value in config file) (特殊的證書請求的擴展字段)
-utf8 input characters are UTF8 (default ASCII) (輸入utf8編碼的字符,默認是ASCII編碼)
-nameopt arg - various certificate name options
-reqopt arg - various request text options
案例:
1.openssl req -key privkey.pem -passin pass:111111 -new -out request.pem
使用一個已存在的密鑰生成證書請求文件(注:privkey是已存在的私鑰文件,111111是該私鑰的口令,關於如何生成非對稱密鑰對,你能夠查看博客中的其餘文章)
2.openssl req -newkey rsa:1024 -keyout privekey.pem -passout pass:111111 -out request.pem
生成一份新的1024位的私鑰privekey.pem,再使用該私鑰生成一份證書請求文件request.pem。
3.openssl req -new -x509 -key privekey.pem -passin pass:11111 -out cert.cer
使用已存在的密鑰privekey.pem,生成一份自簽名的根證書cert.cer。
*********************************************************************************************************
2、證書管理命令:CA
usage: ca args
-verbose - Talk alot while doing things (輸出操做過程的詳細信息)
-config file - A config file (指定OpenSSL配置文件)
-name arg - The particular CA definition to use (指定配置文件中的CA配置字段)
-gencrl - Generate a new CRL (生成一份CRL(證書吊銷列表))
-crldays days - Days is when the next CRL is due (CRL有效期,天)
-crlhours hours - Hours is when the next CRL is due (CRL有效期,小時)
-startdate YYMMDDHHMMSSZ - certificate validity notBefore (證書生效日期)
-enddate YYMMDDHHMMSSZ - certificate validity notAfter (overrides -days) (證書到期日期)
-days arg - number of days to certify the certificate for (證書有效天數)
-md arg - md to use, one of md2, md5, sha or sha1 (使用信息摘要算法)
-policy arg - The CA 'policy' to support (指定匹配字段)
-keyfile arg - private key file (指定用於簽發證書請求的私鑰文件)
-keyform arg - private key file format (PEM or ENGINE) (私鑰格式)
-key arg - key to decode the private key if it is encrypted (指定私鑰口令)
-cert file - The CA certificate (指定用於簽發證書請求的證書文件)
-selfsign - sign a certificate with the key associated with it (自簽名證書)
-in file - The input PEM encoded certificate request(s) (指定要輸入的證書請求文件)
-out file - Where to put the output file(s) (輸出簽發好的證書或生成的CRL文件)
-outdir dir - Where to put output certificates (證書或CRL的輸出目錄)
-infiles .... - The last argument, requests to process (做爲最後一個選項使用,指定多個證書請求文件,而不是前面in選項指定的一個證書請求文件)
-spkac file - File contains DN and signed public key and challenge (包括DN和公鑰的證書請求文件)
-ss_cert file - File contains a self signed cert to sign (自簽名證書)
-preserveDN - Don't re-order the DN (不從新對證書主體名稱的內容進行排序)
-noemailDN - Don't add the EMAIL field into certificate' subject (去除證書請求中的Email信息)
-batch - Don't ask questions (不提示輸入信息而直接簽發證書)
-msie_hack - msie modifications to handle all those universal strings
-revoke file - Revoke a certificate (given in file) (吊銷一份證書文件)
-subj arg - Use arg instead of request's subject (從新填寫證書請求的用戶信息)
-utf8 - input characters are UTF8 (default ASCII) (輸入utf8格式編碼文件)
-multivalue-rdn - enable support for multivalued RDNs
-extensions .. - Extension section (override value in config file) (使用擴展字段)
-extfile file - Configuration file with X509v3 extentions to add (使用擴展字段)
-crlexts .. - CRL extension section (override value in config file)
-engine e - use engine e, possibly a hardware device.
-status serial - Shows certificate status given the serial number (顯示證書狀態)
-updatedb - Updates db for expired certificates (更新證書庫數據)
案例:
1.openssl ca -in request.pem -out cert.cer
使用前面req生成的證書請求文件做爲輸入,簽發一份證書文件(cert.cer)
2.openssl ca -revoke cert.cer
吊銷一份證書文件
3.openssl ca -updatedb
更新證書數據庫