欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

OPENSSL 常用命令詳解

  發(fā)布時間:2017-09-03 14:38:37   作者:佚名   我要評論
這篇文章主要介紹了OPENSSL 常用命令說明,需要的朋友可以參考下

證書
證書是一個經(jīng)證書授權中心簽過名的包含公鑰及公鑰擁有者信息的文件。證書授權中心(CA)對證書簽名的過程即為證書的頒發(fā)過程。證書里面的公鑰只屬于某一個實體(網(wǎng)站,個人等),它的作用是防止一個實體偽裝成另外一個實體。
證書可以保證非對稱加密算法的合理性,假設A和B的通話過程如下:
A -------> Hello (plain text) ---------> B
A <------- Hello (plain text) ---------- B
A <------ B Send Certificate to A --- B
A ------- cipher text ------------------> B
A <------ cipher text ------------------- B
… …
A在接受了B發(fā)過來的證書以后,A,B就可以使用密文進行通信了。

如果C想偽裝成B,應該怎么做呢?我們想象下面的通話過程:
A-------> Hello (plain text) ---------> C
A <------ Hello (plain text) ----------- C
A <------ C Send Certificate to A --- C

此時A沒有懷疑C的身份,理所當然的接受了C的證書,并繼續(xù)進行下面的通信
A------- cipher text ------------------> C
A <------ cipher text ------------------- C
… …

這樣的情況下A是沒有辦法發(fā)現(xiàn)C是假的,A的用戶名,密碼,甚至卡號等重要信息都有可能被C截獲。如果A在通話過程中要求取得B的證書,并驗證證書里面的名字,如果發(fā)現(xiàn)名字與B不符合,就可以發(fā)現(xiàn)對方不是B。驗證B的名字通過后,再繼續(xù)通信過程。
那么,如果證書是假的怎么辦?或者證書被修改過怎么辦?此時就要用到簽名信息了。數(shù)字證書除了包含證書擁有者的名字和公鑰外,還應包含頒發(fā)證書的機構(gòu)名稱,證書序列號和其它一些可選信息。最重要的是,它包含了證書頒發(fā)機構(gòu)(Certification Authority,簡稱CA)的簽名信息。
通過檢查證書里面CA的簽名信息,就知道這個證書的確是由該CA簽發(fā)的,然后你就可以檢查證書里面的證書擁有者的名字,檢查通過后,就可以提取公鑰,繼續(xù)通信了。這樣做的基礎是,你信任該CA,認為該CA沒有頒發(fā)錯誤的證書。
CA是第三方機構(gòu),被你信任,由它保證證書的確發(fā)給了應該得到證書的人。這里需要解釋一下,CA也是一個實體,它也有自己的公鑰和私鑰,否則怎么做數(shù)字簽名?它也有自己的證書,你可以去它的站點下載它的證書,來驗證簽名。
CA也是分級別的,最高級別的CA叫RootCA,低一級別的CA的證書由它來頒發(fā)和簽名。這樣我們信任RootCA,那些由RootCA簽名過的證書的CA就可以來頒發(fā)證書給實體或其它CA了。那RootCA誰給簽名呢?他們自己給自己簽名,叫自簽名。
現(xiàn)在常用的證書都是采用X.509格式的,這是一個國際標準的證書格式。任何遵循該標準的應用程序都可以讀,寫X509格式的證書。
下面是一個證書的例子:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 17209717939030827578 (0xeed53348d899a23a)
Signature Algorithm: sha1WithRSAEncryption // 簽名算法
Issuer: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd // 證書頒發(fā)者信息
Validity
Not Before: Jan 14 07:01:20 2015 GMT // 證書的有效期
Not After : Feb 13 07:01:20 2015 GMT
Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd // 證書擁有者信息
Subject Public Key Info: //公鑰信息
Public Key Algorithm: rsaEncryption
Public-Key: (512 bit)
Modulus:
00:c5:63:8c:c8:32:b1:2e:15:58:a6:cd:22:f4:40:
ef:53:8e:e7:fa:4e:fd:d5:d9:fe:69:a2:c2:5a:fc:
20:4b:da:c9:17:49:35:4e:67:92:82:ec:4e:a7:a7:
1a:66:3a:c5:36:2e:74:77:30:7a:dd:65:5f:03:9a:
9b:2e:d0:b1:43
Exponent: 65537 (0x10001)
X509v3 extensions: //x509擴展信息
X509v3 Subject Key Identifier:
0E:DB:FE:E6:CF:FE:A6:C8:6D:38:06:A5:22:34:DA:82:A9:BE:42:B8
X509v3 Authority Key Identifier:
keyid:0E:DB:FE:E6:CF:FE:A6:C8:6D:38:06:A5:22:34:DA:82:A9:BE:42:B8

X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: sha1WithRSAEncryption
32:43:0c:e8:32:6f:30:10:c9:0f:a3:36:24:7c:a5:dc:da:8c: // CA的簽名
c4:90:69:90:de:b1:1b:19:8e:b1:a5:35:ce:2e:7a:05:69:94:
46:72:37:c2:2c:38:57:4a:0c:89:bc:90:95:03:af:f2:6f:a0:
3f:13:5f:f0:90:a7:2c:bf:75:ee

算法
加密算法分為兩種:對稱加密算法和非對稱加密算法;
對稱加密算法:即信息的發(fā)送方和接收方使用同一個密鑰去加密和解密數(shù)據(jù)。它的最大優(yōu)勢是加/解密速度快,適合于對大數(shù)據(jù)量進行加密,但密鑰管理困難。AES,DES等都是常用的對稱加密算法;
非對稱加密算法:它需要使用不同的密鑰來分別完成加密和解密操作,一個公開發(fā)布,即公開密鑰,另一個由用戶自己秘密保存,即私用密鑰。信息發(fā)送者用公開密鑰去加密,而信息接收者則用私用密鑰去解密。公鑰機制靈活,但加密和解密速度卻比對稱密鑰加密慢得多。RSA,DSA等是常用的非對稱加密算法;
所以在實際的應用中,人們通常將兩者結(jié)合在一起使用,例如,對稱密鑰加密系統(tǒng)用于存儲大量數(shù)據(jù)信息,而公開密鑰加密系統(tǒng)則用于加密密鑰。
另外還有一種我們需要知道的加密算法,叫做摘要算法,英文名是messagedigest,用來把任何長度的明文以一定規(guī)則變成固定長度的一串字符。那么我們在對文件做簽名的時候,通常都是先使用摘要算法,獲得固定長度的一串字符,然后對這串字符進行簽名。
Base64不是加密算法,它是編碼方式,用來在ASCII碼和二進制碼之間進行轉(zhuǎn)換。
RSA
RSA是目前比較流行的非對稱加密算法,所謂非對稱,就是指該算法需要一對密鑰,使用其中一個加密,則需要用另一個才能解密。下面簡單介紹一下它的原理:
RSA的算法涉及三個參數(shù),n、e1、e2。
其中,n是兩個大質(zhì)數(shù)p、q的積,n的二進制表示所占用的位數(shù),就是所謂的密鑰長度。
e1和e2是一對相關的值,e1可以任意取,但要求e1與(p-1)*(q-1)互質(zhì);再選擇e2,要求(e2*e1) mod((p-1)*(q-1))=1。
(n,e1), (n,e2)就是密鑰對。其中(n,e1)為公鑰,(n,e2)為私鑰。
RSA加解密的算法完全相同,設A為明文,B為密文,則:A=B^e2 mod n;B=A^e1 mod n;(公鑰加密體制中,一般用公鑰加密,私鑰解密)
e1和e2可以互換使用,即:
A=B^e1mod n;B=A^e2 mod n;
關于RSA加密算法的詳細介紹可以參考百度百科;
協(xié)議
SSL是Secure Sockets Layer(安全套接層協(xié)議)的縮寫,可以在Internet上提供秘密性傳輸。Netscape公司在推出第一個Web瀏覽器的同時,提出了SSL協(xié)議標準。其目標是保證兩個應用間通信的保密性和可靠性,可在服務器端和用戶端同時實現(xiàn)支持。已經(jīng)成為Internet上保密通訊的工業(yè)標準。
OpenSSL是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協(xié)議,并提供豐富的應用程序供測試或其它目的使用。
OpenSSL整個軟件包大概可以分成三個主要的功能部分:SSL協(xié)議庫、應用程序以及密碼算法庫。OpenSSL的目錄結(jié)構(gòu)自然也是圍繞這三個功能部分進行規(guī)劃的。
Openssl目前最新的穩(wěn)定版本是1.0.2,可以在openssl的官網(wǎng)下載openssl-1.0.2的源代碼。
Android中已經(jīng)集成了openssl,源碼目錄在:external/openssl
工具
RSA是目前最有影響力的公鑰加密算法,它能抵抗到目前為止已知的絕大多數(shù)密碼攻擊。下面我們要介紹的工具將會主要涉及到秘鑰的產(chǎn)生、管理,證書請求及證書的產(chǎn)生,數(shù)據(jù)加密、解密,算法簽名及身份驗證等;
genrsa
生成RSA私有密鑰,用法如下:
openssl genrsa [-outfilename] [-passout arg] [-aes128] [-aes192] [-aes256] [-des] [-des3] [-idea][-f4] [-3]
[-rand file(s)] [-engine id] [numbits]

Options:
l -outfilename:將生成的私鑰輸出到指定文件,默認為標準輸出;
l -passoutarg:如果對生成的密鑰使用加密算法的話,可以使用”-passout”選項指定密碼來源,這里的arg可以是”pass:password”,”file:pathname”,”stdin”等;
l -des|-des3|-idea:采用什么加密算法來加密生成的密鑰,一般需要輸入保護密碼;
l -f4|3:生成密鑰過程中使用的公共組件,65537或3,默認使用65537;
l numbits:密鑰長度,必須是genrsa命令的最后一個參數(shù),默認值是512;

注意:genrsa生成的私鑰默認是PEM編碼格式;

Example:
1)生成私鑰:
openssl genrsa -out private.pem -3-2048
rsa
RSA密鑰管理工具,用法如下:
openssl rsa [-informPEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg] [-outfilename] [-passout arg] [-sgckey] [-aes128] [-aes192] [-aes256] [-des] [-des3][-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout]

Options:
l -informPEM|NET|DER:指定輸入格式,可以是PEM,NET或DER格式;
l -outformPEM|NET|DER:指定輸出格式,可以是PEM,NET或DER格式;
l -infilename:指定輸入文件,如果是加密過的密鑰,會要求你輸入密碼;
l -outfilename:指定輸出文件名稱;
l -passinarg:輸入密鑰的密碼來源;
l -passoutarg:輸出密鑰如果加密的話,該參數(shù)用于指定密碼的來源;
l -text:以只讀方式輸出密鑰及組件信息;
l -noout:不打印密鑰文件;
l -modulus:顯示密鑰的模數(shù);
l -pubin:默認從輸入文件中讀取私鑰,如果該選項打開的話,就可以從輸入文件中讀取公鑰;
l -pubout:默認輸出私鑰,使用該選項的話,將會輸出公鑰,如果pubin打開的話,pubout也會被自動打開;另外使用該參數(shù)的話,可以由私鑰導出公鑰;
l -check:檢查RSA密鑰是否被破壞;

Example:
1)去掉私鑰的保護密碼
openssl rsa -in private.pem -outprivate_out.pem

2)用DES3算法加密密鑰,需要輸入保護密碼
openssl rsa -in private.pem -des3 -outprivate_out.pem

3)把私鑰文件從PEM格式轉(zhuǎn)換為DER格式
openssl rsa -in private.pem -outformDER -out private.der

4)打印私鑰組件信息
openssl rsa -in private.pem -text-noout

5)導出公鑰文件
openssl rsa -in private.pem -outpublic.pem -pubout

6)檢查密鑰文件的完整性
openssl rsa -in private.pem -check-noout
rsautil
RSA工具指令,包含RSA算法簽名,身份驗證,加密/解密數(shù)據(jù)等功能,用法如下:
openssl rsautl [-in file][-out file] [-inkey file] [-pubin] [-certin] [-sign] [-verify] [-encrypt][-decrypt] [-pkcs]
[-ssl] [-raw] [-hexdump] [-asn1parse]

Options:
l -infile:指定輸入文件;
l -outfile:指定輸出文件;
l -inkeyfile:加密/解密數(shù)據(jù)時使用的密鑰文件,缺省使用RSA私鑰;
l -pubin:如果設置該選項,則使用RSA公鑰加密/解密數(shù)據(jù);
l -certin:指定使用證書文件加密/解密,證書中包含RSA公鑰;
l -sign:數(shù)據(jù)簽名,需要指定RSA私鑰;
l -verify:數(shù)據(jù)驗證;
l -encrypt:數(shù)據(jù)加密;
l -decrypt:數(shù)據(jù)解密;
l -pkcs|-ssl|-raw:指定數(shù)據(jù)填充模式,分別代表:PKCS#1v1.5(缺省值),SSL v2填充模式或無填充。如果要簽名,只能使用pkcs或raw選項;
l -hexdump:用十六進制輸出數(shù)據(jù);
l -asn1parse:按照ASN.1結(jié)構(gòu)分析輸出數(shù)據(jù),詳細可以查看asn1parse命令,和”-verify”選項一起使用威力強大;

Example:
1)公鑰加密
openssl rsautl -encrypt -in test.txt-out test.enc -inkey public.pem -pubin
注意:如果使用證書加密的話,需要使用-certin選項,-inkey指定證書文件;

2)私鑰解密
openssl rsautl -decrypt -in test.enc-out test.dec -inkey private.pem

3)私鑰簽名
openssl rsautl -sign -in test.txt -outtest.sig -inkey private.pem

4)公鑰驗證
openssl rsautl -verify -in test.sig-out test.vfy -inkey public.pem -pubin
注意:如果使用證書驗證簽名,需要使用-certin選項,-inkey指定證書文件;
req
創(chuàng)建和處理證書請求的工具,它還能建立自簽名的證書,做RootCA用。用法如下:
openssl req [-inform PEM|DER][-outform PEM|DER] [-in filename] [-passin arg] [-out filename] [-passout arg][-text] [-pubkey] [-noout] [-verify] [-modulus] [-new] [-rand file(s)] [-newkeyrsa:bits] [-newkey alg:file] [-nodes] [-key filename] [-keyform PEM|DER][-keyout filename] [-keygen_engine id] [-[digest]] [-config filename] [-subjarg] [-multivalue-rdn] [-x509] [-days n] [-set_serial n] [-asn1-kludge][-no-asn1-kludge] [-newhdr] [-extensions section] [-reqexts section] [-utf8][-nameopt] [-reqopt] [-subject] [-subj arg] [-batch] [-verbose]

在創(chuàng)建證書請求(CSR)的過程中會要求用戶輸入一些必要的信息,包括位置、組織、郵箱等信息,可以把它們放在配置文件里,也可以放在命令行參數(shù)里;

Options:
l -text:以可讀方式打印將CSR文件里的內(nèi)容;
l -noout:不要打印CSR文件的編碼信息;
l -pubkey:解析CSR文件里的公鑰信息,并打印出來;
l -modulus:解析CSR文件里的公鑰模數(shù),并打印出來;
l -verify:檢驗請求文件的簽名信息;
l -new:創(chuàng)建新的CSR,它會要求用戶輸入一些必要信息。如果沒有指定-key參數(shù),將會生成新的私鑰;
l -newkeyarg:創(chuàng)建新的CSR和新的私鑰,參數(shù)指示私鑰算法等信息(類似rsa:1024);
l -keyfilename:指定私鑰文件,該選項支持pkcs8格式的私鑰;
l -keyoutfilename:如果產(chǎn)生了新的私鑰,則把私鑰保存到指定文件;
l -[digest]:指定證書的摘要算法,可以是sha1|md5等,默認使用哈希算法;
l -configfilename:指定config文件,配置文件可以包含創(chuàng)建CSR所需的各種信息;
l -x509:產(chǎn)生自簽名的證書,而不是證書請求;
l -days:證書的有效期,缺省是30天;
l -subject:顯示CSR的位置,組織等信息;
l -subjarg:設置CSR的位置,組織等信息,格式:/C=AU/ST=Some-State/type0=value0

關于配置文件的格式,可以參考openssl的在線幫助文檔;


Example:
1)生成一個私鑰,并使用該私鑰產(chǎn)生證書請求
openssl genrsa -out private.pem 1024
openssl req -new -key private.pem -outreq.pem
如果加上-sha256,則使用sha256摘要算法;

2)生成一個私鑰,并使用該私鑰產(chǎn)生證書請求,另一個方法
openssl req -newkey rsa:2048 -keyoutprivate.pem -out req.pem

3)檢測并驗證證書請求
openssl req -verify -in req.pem -text -noout

4)制作自簽名的根證書,使用已有私鑰
openssl req -new -x509 -key private.pem-sha256 -out rootca.crt

5)制作自簽名的根證書,創(chuàng)建新的私鑰
openssl req -newkey rsa:2048 -keyoutprivate.pem -x509 -sha256 -out rootca.crt

x509
證書管理工具,可以用來顯示證書的內(nèi)容,證書格式轉(zhuǎn)換,為證書請求簽名等。用法如下:
openssl x509 [-inform DER|PEM|NET][-outform DER|PEM|NET] [-keyform DER|PEM]
[-CAform DER|PEM] [-CAkeyform DER|PEM][-in filename] [-out filename] [-serial] [-hash] [-subject_hash] [-issuer_hash][-ocspid] [-subject] [-issuer] [-nameopt option] [-email] [-ocsp_uri][-startdate] [-enddate] [-purpose] [-dates] [-checkend num] [-modulus][-pubkey] [-fingerprint] [-alias] [-noout] [-trustout] [-clrtrust] [-clrreject][-addtrust arg] [-addreject arg] [-setalias arg] [-days arg] [-set_serial n][-signkey filename] [-passin arg] [-x509toreq] [-req] [-CA filename] [-CAkeyfilename] [-CAcreateserial] [-CAserial filename] [-force_pubkey key] [-text][-certopt option] [-C] [-md2|-md5|-sha1|-mdc2] [-clrext] [-extfile filename][-extensions section] [-engine id]

Options:
由于x509的選項比較多,下面我們來分類介紹:
1)輸入/輸出相關選項
l -inform|-outformDER|PEM|NET:指定輸入/輸出文件的編碼格式;
l -in|-outfilename:指定輸入/輸出文件;
l -md2|-md5|-sha1|-mdc2:指定摘要算法,默認使用哈希算法;
2)顯示選項
l -text:以可讀方式打印證書內(nèi)容;
l -pubkey:解析證書里面的公鑰信息,并打印出來;
l -modulus:解析證書里面的公鑰模數(shù)信息,并打印出來;
l -serial:顯示證書的序列號;
l -subject:顯示證書擁有者的信息;
l -issuer:顯示證書頒發(fā)者的名字;
l -email:顯示郵箱信息;
l -startdate|-enddate |-dates:顯示證書有效期,起始和結(jié)束時間;
l -fingerprint:顯示DER格式證書的DER版本信息;
l -C:以C語言源文件方式,輸出證書;
3)信任相關的選項
l -purpose:顯示證書用途;
4)簽名相關選項
l -signkeyfilename:使用給定的私鑰,對輸入文件進行簽名;如果輸入文件是證書,那么它的頒發(fā)者就會被設置成其擁有者,其它項也會被設置成符合自簽名特征的證書項;如果輸入文件是證書請求,那么就會產(chǎn)生一個自簽名的證書;
l -days:證書有效期;
l -x509toreq:把證書轉(zhuǎn)換成證書請求,需要-signkey選項指定私鑰;
l -req:默認輸入文件是一個證書,使用該選項的話,指示輸入文件是一個證書請求;
l -CAfilename:指定簽名用的CA證書文件,該選項通常和-req一起用,對證書請求實施自簽名;
l -CAkeyfilename:指定CA的私鑰文件,對證書進行簽名;

Examples:
1)顯示證書內(nèi)容
openssl x509 -in cert.pem –noout -text

2)顯示證書序列號
openssl x509 -in cert.pem -noout-serial

3)顯示證書的subject信息
openssl x509 -in cert.pem -noout-subject

4)顯示證書的fingerprint信息
openssl x509 -in cert.pem -noout-fingerprint

5)證書格式轉(zhuǎn)換
openssl x509 -in cert.pem -inform PEM-out cert.der -outform DER
openssl x509 -in cert.der -inform DER-out cert.pem -outform PEM

6)把證書轉(zhuǎn)換為證書請求
openssl x509 -x509toreq -in cert.pem-out cert.csr -signkey private.pem

7)把證書請求轉(zhuǎn)換為證書
openssl x509 -req -in careq.pem-extfile openssl.cnf -extensions v3_ca -signkey key.pem -out cacert.pem

8)從證書里面提取公鑰
openssl x509 -pubkey -in cert.pem >pub.pem

9)以c語言源文件方式輸出證書,PEM格式轉(zhuǎn)換為DER格式
openssl x509 -in cert.pem -out cert.der-outform DER -C > cert.c

asn1parse
asn1parse是一個診斷工具,可以解析ASN.1結(jié)構(gòu)的密鑰,證書等,用法如下:
openssl asn1parse [-informPEM|DER] [-in filename] [-out filename] [-noout] [-offset number]
[-length number] [-i] [-oid filename][-dump] [-dlimit num] [-strparse offset] [-genstr string]
[-genconf file] [-strictpem]

Options:
l -i:以縮進方式顯示ASN.1結(jié)構(gòu)

Example:
1)解析文件:
openssl asn1parse -in file.pem

2)解析DER格式的文件
openssl asn1parse -inform file.der -infile.der
dgst
摘要算法,用法如下:
openssl dgst[-sha|-sha1|-mdc2|-ripemd160|-sha224|-sha256|-sha384|-sha512|-md2|-md4|-md5|-dss1][-c] [-d] [-hex] [-binary] [-r] [file...]

所謂摘要算法,就是把任何長度的明文以一定規(guī)則變成固定長度的一串字符。

Options:
-sha|-sha1 |-sha256 |-md5:算法名稱;
-c:打印出哈希結(jié)果的時候用冒號來分隔開;
-d:詳細打印出調(diào)試信息;
-hex:以十六進制輸出哈希結(jié)果,默認值;
-binary:以二進制輸出哈希結(jié)果;
file:要哈希的文件;

Example:
1)使用sha256摘要算法,并以二進制方式輸出
openssl dgst -sha256 -binary file.txt
PEM和DER格式
PEM和DER是兩種不同的編碼格式,PEM使用ASCII(base64)編碼方式,PEM格式文件的第一行和最后一行指明文件內(nèi)容,DER采用二進制編碼格式;使用openssl工具生成的密鑰或證書,默認使用PEM編碼格式;
實例
Image簽名
高通平臺支持bootimg簽名和校驗功能,下面我們先來看看它的簽名腳本:
define build-boot-image
mv -f $(1) $(1).nonsecure
openssl dgst -$(TARGET_SHA_TYPE) -binary $(1).nonsecure >$(1).$(TARGET_SHA_TYPE)
openssl rsautl -sign -in $(1).$(TARGET_SHA_TYPE) -inkey$(PRODUCT_PRIVATE_KEY) -out $(1).sig
dd if=/dev/zero of=$(1).sig.padded bs=$(BOARD_KERNEL_PAGESIZE) count=1
dd if=$(1).sig of=$(1).sig.padded conv=notrunc
cat $(1).nonsecure $(1).sig.padded > $(1).secure
rm -rf $(1).$(TARGET_SHA_TYPE) $(1).sig $(1).sig.padded
mv -f $(1).secure $(1)
endef
這里定義了一個build-boot-image宏,使用方法如下:
$(INSTALLED_BOOTIMAGE_TARGET) :=$(PRODUCT_OUT)/boot.img
INSTALLED_SEC_BOOTIMAGE_TARGET :=$(PRODUCT_OUT)/boot.img.secure
$(INSTALLED_SEC_BOOTIMAGE_TARGET):$(INSTALLED_BOOTIMAGE_TARGET)
$(hide) $(callbuild-boot-image,$(INSTALLED_BOOTIMAGE_TARGET))

上面就是對bootimg實施簽名操作的腳本,build-boot-image宏做了什么事呢?
1)對bootimg實施摘要算法
openssl dgst -sha256 -binary boot.img.nonsecure> boot.img.sha256
2)制作簽名
openssl rsautl -sign -inboot.img.sha256 -inkey qcom.key -out boot.img.sig
3)填充簽名
dd if=/dev/zero of=boot.img.sig.paddedbs=2048 count=1
dd if=boot.img.sig of=boot.img.sig.paddedconv=notrunc
生成好的簽名已經(jīng)保存到boot.img.sig.padded,文件大小是2048字節(jié),用0填充;
4)把簽名打到image上,并刪除中間文件
cat boot.img.nonsecure boot.img.sig.padded> boot.img.secure
rm -rf $boot.img.sha256 boot.img.sigboot.img.sig.padded
mv -f boot.img.secure boot.img

Image簽名完成,簽名信息保存在image的最后2048字節(jié),不足的都用0來填充;

驗證簽名又是怎樣的過程呢?前面用到了qcom.key,這個是高通提供的私鑰,那么要驗證簽名,我們就需要用這個私鑰制作的證書。驗證過程是在LK里面完成的,所以我們還需要把證書轉(zhuǎn)換為C源文件方式,方法很簡單,用下面幾條命令就可以了:
openssl req -new -x509 -key qcom.key -days11324 -sha256 -out qcom.crt
openssl x509 -inform PEM -in qcom.crt-outform DER -out qcom.der > cert.c
好了,cert.c就是以C源文件方式存儲的證書,替換到LK里面相應的數(shù)組就可以了;

制作testkey
testkey是用來給apk簽名的,保存在build/target/product/security目錄下,testkey.pk8是私鑰,
testkey.x509.pem是證書,那么這個key和證書是如何生成的呢?README寫的很清楚:
development/tools/make_key testkey '/C=US/ST=California/L=MountainView/O=android/OU=Android/
CN=Android/emailAddress=android@android.com'

development/tools/make_key是制作testkey的腳本文件,我們看幾條比較重要的命令吧:
1)生成私鑰
openssl genrsa -f4 2048 | tee ${one}> ${two}
2)制作證書
openssl req -new -x509 ${hash} -key${two} -out $1.x509.pem -days 10000 -subj "$2"
3)制作pk8格式私鑰
openssl pkcs8 -in ${one} -topk8-outform DER -out $1.pk8 –nocrypt
SecureBoot
呵呵,還沒準備好…
Help
OpenSSL提供了非常豐富的幫助信息,如果對哪個命令或參數(shù)不了解,可以很方便的使用幫助來查看命令的詳細用法;
命令列表
使用下面命令查看openssl支持的命令和算法列表:
openssl [ list-standard-commands | list-message-digest-commands | list-cipher-commands |
list-cipher-algorithms | list-message-digest-algorithms | list-public-key-algorithms]
list-standard-commands:標準命令列表
list-message-digest-commands:摘要命令列表
list-cipher-commands:加密命令列表
list-cipher-algorithms:加密算法列表
list-message-digest-algorithms:摘要算法列表
list-public-key-algorithms:公鑰加密算法列表
獲取幫助
雖然openssl并不支持”-h”參數(shù),使用”-h”參數(shù),會出現(xiàn)類似” unknown option -h”的錯誤提示,但是openssl的幫助系統(tǒng)還是很nice的,在使用錯誤參數(shù)的情況下,會把命令的詳細用法及參數(shù)解釋列出來,因此,還是可以用”openssl command -h”的方式來獲取幫助信息。
我們還可以使用類似”man genrsa”的方法,來查看openssl的幫助文檔;
最后,我們還可以訪問openssl的主頁,里面有詳細的幫助文檔;

參考資料
openssl幫助文檔:http://www.openssl.org/docs/
openssl命令詳解.pdf
 

生成CSR的請求

openssl req -new -nodes -newkey rsa:2048 -keyout server.key -out server.csr 

將PEM文件合成為PFX(PKCS12)文件

需要合成PFX文件,必須有私鑰文件server.key和服務器證書文件server.crt。此外,還需要根據(jù)服務器證書server.crt 下載中間證書chain.crt,以保證PFX文件中直接包含了中間證書。

openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt -certfile chain.crt 

從PFX(PKCS12)文件中,分解出KEY和CRT文件

將PFX文件轉(zhuǎn)為一個PEM文件

openssl pkcs12 -in myssl.pfx -nodes -out server.pem 

導出私鑰文件

openssl rsa -in server.pem -out server.key 

導出服務器證書文件

openssl x509 -in server.pem -out server.crt 

顯示服務器證書的文信息

openssl x509 -in server.crt -noout –text

查看PFX(PKCS12)文件中的內(nèi)容

openssl pkcs12 -info -in server.pfx 

查看一個網(wǎng)站的證書信息

openssl s_client -connect host:port -showcerts

對私鑰文件的加密和解密

解密一個已經(jīng)加密過的私鑰文件

openssl rsa -in keyin.txt -out keyout.txt

然后輸入密碼,就可以得到?jīng)]有加密的keyout.txt文件。

加密一個私鑰文件
 

openssl rsa -in keyin.txt -des -out keyout.txt -passout pass:[PASSWORD]

 

相關文章

最新評論