本文翻譯至一位很牛X的法國密碼學(xué)老教授 Eric,先在這里默默感謝他
網(wǎng)上已有好多關(guān)于openssl的帖子,但是基本上都很“實用”,只講如何創(chuàng)建證書來用于數(shù)據(jù)的加密,如何你只需要這些,那么可以去 “流浪的腳步”的博客
http://blog.csdn.net/darkstar21cn/archive/2005/06/11/392492.aspx
如果你需要多了解點openssl的,繼續(xù)看下去吧
openssl 的功能:
* 生成RSA,DSA雙密匙(還可以再給他們簽名)
* 生成X509 證書
* 計算印章(MD5,SHA,,RIPEMD160)用于加密大文件
*加密,解密 (算法有 DES, IDEA,RC2 , RC4, Blowfish...)
*SSL 服務(wù)器端/客戶端測試
* 處理簽名或加密了的郵件
假設(shè)你已經(jīng)安裝了openssl, 下面在我分點講解,然后在每一點后面加一個例子
1.生成一對RSA密匙(非對稱密匙,包含1個公共+一個私用),
$ openssl genrsa -out <fichier> <taille>
例子: openssl genrsa -out maCle.pem 1024
可以用查看我們的密匙
$ cat maCle.pem
- $ cat maCle.pem
- BEGIN RSA PRIVATE KEY ?????
- MIICXAIBAAKBgQCveVjLltevTC5kSAiTYjHMVuAR80DHMLWCp3BOVZ49eXwraXxO
- 7AfKWpA5g0wFZgZNERIfFYaCnvaQDQA+9BRIfsSSr3oSw0My5SD6eg15v0VmJmvP
- d8LgBypJHbr6f5MXWqntvzp0Qvg6ddeNpUIrqkkh4uDfHFDWqyrkQUCvKwIDAQAB
- AoGANchUrfnq28DWy0fE0R+cscvC292Z8jN8vrIBWxEk8iSlKU0om6v+a0g8wlP6
- 3 gC6V66uxjY7xxdf7SD+/UykVl4PGFymhLtywSdGlgec3tLgBtV3ytJFilAVDBij
- LzQwUegCO4zt1JWYc6vvaVdNyQSaGIIeYGsNDWEYlOtDSlkCQQDVRn9JS15G8p+H
- 4Z0PbU9ZQg2L1u9/SD/kELVe3Kx1fdHulxH0v8V2AgPdXA29Nhi+TxUtC+V8CMc2
- KXmAvFsHAkEA0qBDmjHMDPwcGaqbQ2lymYQIGlZ5TLQFA98Dey2uE+CB6pmS/ e /Z
- ilu1IaasuE3vBzXfB /JU7DUkV++JQ7TtvQJBAL2s5dUch2sXqlOhjhpDP/eE7CE6
- 9WLAsbm2Nmd4YJRZYtQLXPfLeeSapC9BCCMHsnfGQ3H9i4mFEQ6VUi7w1Q8CQAQa
- pVaS09QI8Y86eM4GdvowzWud9b0d4N8jcFDtIfA3NrDYjzmte8KraMsgEUuCET9F
- uHPSL/9uRagE/dq44s0CQCMQU4PMqkMtwzCFsV8ZqLmkDPn1binIAwRLYFcsQRDt
- gTi6rycz3Pk1hCVzBfyMd8zwqpwKmR5FoOXuJEv+mVg=
- END RSA PRIVATE KEY ?????
用cat只看到了一些字符串,但我們完全不懂他的含義,openssl還提供了一個功能就是查看RSA
如果研究過非對稱加密的朋友,可以用這個命令看出這對密匙的生成參數(shù): 2個大素數(shù), 1個模等
$ openssl rsa -in <fichier> -text -noout
- $openssl rsa ?in maCle.pem ?text ?noout
- Private ?Key : (1024 bit)
- modulus :
- 0 0 : a f : 7 9 : 5 8 : cb : 9 6 : d7 : a f : 4 c : 2 e : 6 4 : 4 8 : 0 8 : 9 3 : 6 2 :
- 3 1 : c c : 5 6 : e0 : 1 1 : f 3 : 4 0 : c7 : 3 0 : b5 : 8 2 : a7 : 7 0 : 4 e : 5 5 :
- 9 e : 3 d : 7 9 : 7 c : 2 b : 6 9 : 7 c : 4 e : e c : 0 7 : ca : 5 a : 9 0 : 3 9 : 8 3 :
- 4c :05:66:06:4 d :11:12:1 f :15:86:82:9 e : f6 :90:0 d :
- 0 0 : 3 e : f 4 : 1 4 : 4 8 : 7 e : c4 : 9 2 : a f : 7 a : 1 2 : c3 : 4 3 : 3 2 : e5 :
- 2 0 : f a : 7 a : 0 d : 7 9 : b f : 4 5 : 6 6 : 2 6 : 6 b : c f : 7 7 : c2 : e0 : 0 7 :
- 2 a : 4 9 : 1 d : ba : f a : 7 f : 9 3 : 1 7 : 5 a : a9 : ed : b f : 3 a : 7 4 : 4 2 :
- f 8 : 3 a : 7 5 : d7 : 8 d : a5 : 4 2 : 2 b : aa : 4 9 : 2 1 : e2 : e0 : d f : 1 c :
- 5 0 : d6 : ab : 2 a : e4 : 4 1 : 4 0 : a f : 2 b
- publicExponent: 65537 ( 0 x10001 )
- privateExponent :
- 3 5 : c8 : 5 4 : ad : f 9 : ea : db : c0 : d6 : cb : 4 7 : c4 : d1 : 1 f : 9 c :
- b1 : cb : c2 : db : dd : 9 9 : f 2 : 3 3 : 7 c : be : b2 : 0 1 : 5 b : 1 1 : 2 4 :
- f 2 : 2 4 : a5 : 2 9 : 4 d : 2 8 : 9 b : ab : f e : 6 b : 4 8 : 3 c : c2 : 5 3 : f a :
- de : 0 0 : ba : 5 7 : ae : ae : c6 : 3 6 : 3 b : c7 : 1 7 : 5 f : ed : 2 0 : f e :
- f d : 4 c : a4 : 5 6 : 5 e : 0 f : 1 8 : 5 c : a6 : 8 4 : bb : 7 2 : c1 : 2 7 : 4 6 :
- 9 6 : 0 7 : 9 c : de : d2 : e0 : 0 6 : d5 : 7 7 : ca : d2 : 4 5 : 8 a : 5 0 : 1 5 :
- 0 c : 1 8 : a3 : 2 f : 3 4 : 3 0 : 5 1 : e8 : 0 2 : 3 b : 8 c : ed : d4 : 9 5 : 9 8 :
- 7 3 : ab : e f : 6 9 : 5 7 : 4 d : c9 : 0 4 : 9 a : 1 8 : 8 2 : 1 e : 6 0 : 6 b : 0 d :
- 0d : 6 1 : 1 8 : 9 4 : eb : 4 3 : 4 a : 5 9
- prime1 :
- 0 0 : d5 : 4 6 : 7 f : 4 9 : 4 b : 5 e : 4 6 : f 2 : 9 f : 8 7 : e1 : 9 d : 0 f : 6 d :
- 4 f : 5 9 : 4 2 : 0 d : 8 b : d6 : e f : 7 f : 4 8 : 3 f : e4 : 1 0 : b5 : 5 e : dc :
- ac : 7 5 : 7 d : d1 : e e : 9 7 : 1 1 : f 4 : b f : c5 : 7 6 : 0 2 : 0 3 : dd : 5 c :
- 0d : bd : 3 6 : 1 8 : be : 4 f : 1 5 : 2 d : 0 b : e5 : 7 c : 0 8 : c7 : 3 6 : 2 9 :
- 7 9 : 8 0 : bc : 5 b : 0 7
- 2
- prime2 :
- 0 0 : d2 : a0 : 4 3 : 9 a : 3 1 : c c : 0 c : f c : 1 c : 1 9 : aa : 9 b : 4 3 : 6 9 :
- 7 2 : 9 9 : 8 4 : 0 8 : 1 a : 5 6 : 7 9 : 4 c : b4 : 0 5 : 0 3 : d f : 0 3 : 7 b : 2 d :
- ae : 1 3 : e0 : 8 1 : ea : 9 9 : 9 2 : f d : e f : d9 : 8 a : 5 b : b5 : 2 1 : a6 :
- ac : b8 : 4 d : e f : 0 7 : 3 5 : d f : 0 7 : f 2 : 5 4 : e c : 3 5 : 2 4 : 5 7 : e f :
- 8 9 : 4 3 : b4 : ed : bd
- exponent1 :
- 0 0 : bd : ac : e5 : d5 : 1 c : 8 7 : 6 b : 1 7 : aa : 5 3 : a1 : 8 e : 1 a : 4 3 :
- 3 f : f 7 : 8 4 : e c : 2 1 : 3 a : f 5 : 6 2 : c0 : b1 : b9 : b6 : 3 6 : 6 7 : 7 8 :
- 6 0 : 9 4 : 5 9 : 6 2 : d4 : 0 b : 5 c : f 7 : cb : 7 9 : e4 : 9 a : a4 : 2 f : 4 1 :
- 0 8 : 2 3 : 0 7 : b2 : 7 7 : c6 : 4 3 : 7 1 : f d : 8 b : 8 9 : 8 5 : 1 1 : 0 e : 9 5 :
- 5 2 : 2 e : f 0 : d5 : 0 f
- exponent2 :
- 0 4 : 1 a : a5 : 5 6 : 9 2 : d3 : d4 : 0 8 : f 1 : 8 f : 3 a : 7 8 : c e : 0 6 : 7 6 :
- f a : 3 0 : cd : 6 b : 9 d : f 5 : bd : 1 d : e0 : d f : 2 3 : 7 0 : 5 0 : ed : 2 1 :
- f 0 : 3 7 : 3 6 : b0 : d8 : 8 f : 3 9 : ad : 7 b : c2 : ab : 6 8 : cb : 2 0 : 1 1 :
- 4b : 8 2 : 1 1 : 3 f : 4 5 : b8 : 7 3 : d2 : 2 f : f f : 6 e : 4 5 : a8 : 0 4 : f d :
- da : b8 : e2 : cd
- coefficient :
- 2 3 : 1 0 : 5 3 : 8 3 : c c : aa : 4 3 : 2 d : c3 : 3 0 : 8 5 : b1 : 5 f : 1 9 : a8 :
- b9 : a4 : 0 c : f 9 : f 5 : 6 e : 2 9 : c8 : 0 3 : 0 4 : 4 b : 6 0 : 5 7 : 2 c : 4 1 :
- 1 0 : ed : 8 1 : 3 8 : ba : a f : 2 7 : 3 3 : dc : f 9 : 3 5 : 8 4 : 2 5 : 7 3 : 0 5 :
- f c : 8 c : 7 7 : c c : f 0 : aa : 9 c : 0 a : 9 9 : 1 e : 4 5 : a0 : e5 : e e : 2 4 :
- 4b : f e : 9 9 : 5 8
2.很多時候讓剛剛生成的密匙以明碼的形式存在是有危險的,所以openssl還提供了用對稱加密法(DES, DES3等)加密RSA密匙的功能
$ openssl rsa -in <RSA
密碼
文件>
-des3 -out
<RSA
密碼
文件>
例子:
- $opensslrsa ?in maCle.pem ?des3 ?out maCle.pem
- w r i t i n g RSA key
- Enter PEM p a s s p h r a s e :
- V e r i f y i n g ? Enter PEM p a s s p h r a s e :
3. 剛才說過,RSA包含1個公共+一個私密匙,openssl提供將公用部分從密匙里提取出來,因為在跟對方交流時,對方只要你的公共部分就可以了,如果你的私有部分也被人知道了,那RSA加密的意義就失去了;
所以記?。?span style="color: #ff0000;">RSA的私有密匙只能有你一個人知道,如果泄露了,得馬上更新一對新的RSA
密匙
$openssl rsa -in <
RSA
密碼
文件
> -pubout -out <
RSA
公共密碼
文件
>
例子:
- $openssl rsa ?in maCle.pem ?pubout ?out maClePublique.pem
4.加密文件
$openssl rasutl -encrypt -in <原始文件> -inkey <
RSA
密碼
文件> -out <輸出文件>
或者只用公用密碼加密
$openssl rasutl -encrypt -in <原始文件> -inkey -pubin <
RSA
公共
密碼
文件> -out <輸出文件>
5。解密的話只要將 -encrypt 改為 -decrypt就好,當(dāng)然文件對象改變一下
6. 簽名不只適合小文件,如果對大文件的話得引進印章(Message Digests). 先計算該文件的印章
$ openssl dgst <hachage算法> -out <印章文件> <原始大文件>
hachage算法有:
* MD5 (-md5)
* SHA1 (-sha1)
* RPEMD160 (-ripemd160)
然后要對該印章簽名
$ openssl rsautl -sign -in <印章文件> -inkey <
RSA
密碼
文件> -out <簽名文件>
然后我們就可以將原始大文件+它的簽名文件
發(fā)給對方了, 在對方可以用我們提供給他的RSA
公共
密碼
文件
驗證該文件,如果符合就說明是我們的文件;否則說明在傳輸過程中該文件已被人篡改過,不能相信這個文件內(nèi)容
對方的驗證方法:
先從受到的簽名文件中獲取“對方印章文件1
”
$ openssl rsautl -verify -in
<簽名文件> -pubin -inkey <
RSA
公共
密碼
文件
> -out <對方印章文件1>
然后從收到的原始大文件中用同樣的hachage算法
算出另一個““對方印章文件2
”
$ openssl dgst <hachage算法> -out <對方印章文件2> <原始大文件>
最后只要比較這兩個獲得的
“對方印章文件1
”與
““對方印章文件2
”是否完全相同,如果是就說明文件未必篡改
$ diff <
對方印章文件1
> <
對方印章文件2
>
7.證書的創(chuàng)建
首先得建立一個證書申請請求:
創(chuàng)建文件 req.cnf
, 包含我們的個人信息
- [ req ]
- default_bits = 1024
- distinguished_name = req_DN
- [ req_DN ]
- countryName = "1. Pays (code a 2 lettres) "
- countryName_default = FR
- countryName_min = 2
- countryName_max = 2
- stateOrProvinceName = "2. Departement ou province "
- stateOrProvinceName_default = Nord (59)
- localityName = "3. Nom de la localite "
- localityName_default = Villeneuve d/'Ascq
- 0.organizationName = "4. Organisation "
- 0.organizationName_default = Universite de Lille 1
- organizationalUnitName = "5. Unite ou departement"
- organizationalUnitName_default = "Licence & Master info"
- commonName = "6. Nom "
- commonName_max = 64
- commonName_default = Raymond Calbuth
- emailAddress = "7. Adresse e-mail "
- emailAddress_max = 60
- emailAddress_default = Raymond.Calbuth@ronchin.fr
- extensions = x509v3
- [ x509v3 ]
- subjectAltName = email:copy
- basicConstraints = CA:false,pathlen:0
- nsComment = "Certificat emis par $caname"
- nsCertType = client, email, objsign
$ openssl req ?configreq.cnf ?new ?key maCle . pem ?out maRequete . pem
可以查看我們的申請文件
例子:
- $ openssl req ?config req.cnf ?in maRequete.pem ?text -noout
- Certificate Request :
- Data :
- V e r s i o n : 0 ( 0 x0 )
- S u b j e c t : C=FR, ST=Nord ( 5 9 ) , L=V i l l e n e u v e d ' Ascq , O=U n i v e r s i t e de L i l l e 1 , OU=L
- i n f o , CN=XXXX / e m a i l A d d r e s s=xxx@ l i f l . f r
- S u b j e c t P u b l i c Key I n f o :
- P u b l i c Key Algorithm : r s a E n c r y p t i o n
- 5
- RSA P u b l i c Key : ( 2 0 4 8 b i t )
- Modulus ( 2 0 4 8 b i t ) :
- 0 0 : b4 : f 3 : e0 : 6 5 : 5 0 : 1 2 : f 6 : 5 1 : c2 : 9 6 : 9 0 : 7 7 : 5 b : c3 :
- 2 5 : 4 6 : 1 7 : 1 f : 3 b : 0 e : b9 : a0 : 5 a : f a : 2 7 : 1 4 : 2 c : 4 5 : 9 6 :
- 8 8 : 6 8 : 9 c : 6 0 : b1 : 8 a : 9 4 : 2 c : 2 2 : 7 6 : f 0 : de : 7 e : 0 2 : 1 b :
- 1d : 1 d : 5 7 : b6 : b8 : 8 d : 5 5 : 7 e : 1 5 : a4 : 5 d : a1 : c e : 0 2 : 7 1 :
- cd : 5 6 : 3 0 : dc : 6 7 : 6 4 : f b : cb : c7 : bc : 6 4 : 7 5 : 2 3 : 4 c : 2 f :
- a5 : 0 6 : 4 7 : a6 : 3 9 : 4 6 : 7 4 : f 1 : 8 a : 9 1 : ed : ad : 8 f : 7 d : d3 :
- 3 4 : c0 : 8 7 : 7 9 : 6 1 : a7 : b9 : 8 c : 1 d : 8 c : 4 5 : 0 d : c4 : d f : a8 :
- ea : 2 2 : 0 c : 5 b : f 2 : 0 c : 6 b : 1 1 : 8 e : 2 b : f 6 : 6 a : 9 e : b0 : 1 d :
- e f : 5 3 : e7 : ba : 3 2 : 2 8 : e e : 9 8 : d4 : 8 3 : 1 0 : 6 3 : 6 4 : c2 : 4 f :
- 4 4 : 1 2 : 5 1 : f 2 : a6 : 3 1 : 6 8 : 3 0 : d2 : f 9 : 8 d : 7 a : b f : 2 3 : 0 9 :
- 1 8 : a4 : ab : 0 a : 2 1 : f c : 2 5 : 8 8 : ba : 0 9 : 5 a : 7 0 : 8 2 : 3 3 : 4 1 :
- 9 3 : f 8 : d8 : 0 a : b4 : 3 8 : ae : 4 7 : 8 c : 4 a : d1 : 8 8 : d1 : a f : b6 :
- 1 8 : 7 7 : b8 : 8 4 : 4 e : 7 a : ad : c0 : a6 : 2 3 : e7 : 9 4 : 6 c : 7 6 : cb :
- 0d : da : 1 6 : 1 6 : cb : a5 : 0 f : 7 5 : a6 : e0 : 7 8 : f f : 3 3 : e1 : d1 :
- 5b : 3 c : 8 d : dd : 0 6 : 7 a : 7 2 : e2 : be : 4 8 : c3 : 1 7 : 4 a : 4 f : bb :
- e0 : bb : f b : e6 : bd : 7 e : d4 : f 8 : c1 : 2 a : 5 a : 4 f : 6 a : 3 a : e0 :
- 2 0 : e6 : 6 3 : e5 : d5 : 6 5 : e e : d3 : 8 c : 7 2 : 2 2 : 5 4 : ca : f 2 : 4 0 :
- e f : c1
- Exponent : 65537 ( 0 x10001 )
- Attributes :
- a0 : 0 0
- S i g n a t u r e Algorithm : sha1WithRSAEncryption
- 5 4 : 1 b : b8 : 5 2 : 2 8 : f 1 : 2 9 : e9 : 5 c : 2 8 : bc : e3 : f 6 : 5 8 : cd : 0 f : e8 : 2 c :
- a8 : 8 3 : 1 d : d6 : f 3 : 6 b : 4 6 : f 8 : d5 : c6 : 3 7 : bb : 1 5 : f 5 : 3 4 : 5 8 : 5 6 : 3 d :
- 7b : f 1 : c e : 1 d : b f : 1 4 : 0 9 : f e : f e : f 3 : f 1 : 0 7 : 5 4 : 2 7 : 6 0 : 4 5 : 6 a : e f :
- 8 8 : 8 b : b7 : 8 9 : 7 4 : 7 7 : 5 e : 4 d : a5 : 5 c : ea : 5 c : b8 : 1 c : 7 a : 5 7 : b3 : 8 3 :
- 0d : 2 e : 1 e : 6 2 : 8 6 : f 4 : 0 1 : d4 : 4 d : 3 9 : 5 1 : 2 5 : 0 4 : cb : 0 0 : 3 3 : 2 a : 8 4 :
- 5 c : ae : 0 a : a0 : 6 f : 6 5 : c7 : 7 0 : 0 a : c f : 5 6 : 9 5 : d1 : 7 0 : 2 2 : 0 5 : e1 : f c :
- 2 a : d8 : 9 b : 2 1 : 3 e : 0 5 : bb : 5 c : 9 7 : b4 : 3 5 : 6 7 : 8 5 : e3 : 1 f : 8 b : 8 2 : 3 1 :
- e f : 7 6 : 0 b : 1 7 : 5 3 : a2 : 0 6 : 4 3 : 7 9 : 1 e : cb : a5 : 4 5 : 1 d : 6 a : c9 : d1 : 0 4 :
- 0 c : 4 4 : d7 : 8 7 : 4 4 : 2 c : 4 b : e f : 3 8 : 5 b : 7 2 : 3 8 : de : f f : 7 4 : ae : 5 9 : 1 7 :
- 1 2 : f 5 : 8 7 : 8 c : 0 0 : 5 6 : 0 0 : 3 f : f 0 : d4 : 0 8 : d2 : c1 : 4 b : ae : 8 4 : 0 f : f 3 :
- d5 : dd : ea : 4 8 : 0 b : 8 6 : 3 1 : 8 2 : c5 : f 5 : ae : 1 d : 5 2 : b2 : c6 : 7 4 : 6 2 : d1 :
- f 7 : 9 4 : 4 3 : b2 : 5 d : 9 a : e5 : 5 2 : c1 : 4 8 : 1 0 : f f : 2 7 : bb : d5 : e c : 0 0 : b8 :
- aa : 8 8 : 7 7 : c3 : 3 6 : f 9 : 8 7 : 4 1 : d9 : da : 5 8 : 9 a : c3 : 2 6 : 8 c : ba : e3 : 1 9 :
- f e : 2 5 : 4 2 : 2 5 : 1 2 : b4 : d4 : 7 9 : e1 : d9 : b9 : 9 4 : d8 : 8 3 : 9 0 : 3 6 : ac : ca :
- c6 : a7 : b2 : 9 c
我們擁有了一個證書申請,還需要一個證書頒發(fā)機構(gòu)CA來給你的申請簽名,否則無效
一般情況下,個人可以自己來充當(dāng)這個CA機構(gòu),只需再創(chuàng)建一個證書(大多數(shù)人是這樣的);
教授提供了一個CA證書(應(yīng)該具有一點定的權(quán)威性吧),大家可以下載復(fù)制保存一下
查看證書信息:
$ openssl x509 -in <證書.pem> -text -noout
pereUbuCertif.pem
- -----BEGIN CERTIFICATE-----
- MIIEbzCCA1egAwIBAgIJAJHWGHcowKN0MA0GCSqGSIb3DQEBBQUAMIG3MQswCQYD
- VQQGEwJQTDEeMBwGA1UECBMVUHJvdmluY2UgZGVzIFBhbG90aW5zMRAwDgYDVQQH
- EwdVYnVQb2xlMRswGQYDVQQKExJSb3lhdW1lIGRlIFBvbG9nbmUxIjAgBgNVBAsT
- GURlcGFydGVtZW50IGRlcyBQaHluYW5jZXMxETAPBgNVBAMTCFBlcmUgVWJ1MSIw
- IAYJKoZIhvcNAQkBFhNQZXJlLlVidUBwYWxvdGluLnBsMB4XDTEwMDUyMDA3NDA0
- MVoXDTE0MDYyODA3NDA0MVowgbcxCzAJBgNVBAYTAlBMMR4wHAYDVQQIExVQcm92
- aW5jZSBkZXMgUGFsb3RpbnMxEDAOBgNVBAcTB1VidVBvbGUxGzAZBgNVBAoTElJv
- eWF1bWUgZGUgUG9sb2duZTEiMCAGA1UECxMZRGVwYXJ0ZW1lbnQgZGVzIFBoeW5h
- bmNlczERMA8GA1UEAxMIUGVyZSBVYnUxIjAgBgkqhkiG9w0BCQEWE1BlcmUuVWJ1
- QHBhbG90aW4ucGwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDfggDe
- ZHhHrFQ/Mig6WUg9q5hrhg9dTjltGngCx+IzCg3RgtgqOTVX23p8/fF9toPN/nzI
- k3MiW5fx36nDmaiEWcEjx6Fvgj9iwhTBMbeDAHPRLq+cq1ocqInAWxtomZ5kRzk3
- ywbC1bG8BKNUJXu9+vnrt/Mvd0klQjVFf0zcZQtKq3UcHByDRqwIN+k7RrccewIq
- nEROpC1v23hyIE4b4K6etp5uO4q+x/sJbil1VW6oE1/4t+6tiqXEDGwMdmGOOf9G
- znz3+MXpjIr3ak6kCd3sTezV+zAARjwCi3fD1f6aYU5wBvZdaop8HZLaXgav8nMw
- ZassKX0HZkw3S6TnAgMBAAGjfDB6MB4GA1UdEQQXMBWBE1BlcmUuVWJ1QHBhbG90
- aW4ucGwwDwYDVR0TBAgwBgEB/wIBADA0BglghkgBhvhCAQ0EJxYlQ2VydGlmaWNh
- dCBnZW5lcmUgcGFyIEVXIGF2ZWMgb3BlblNTTDARBglghkgBhvhCAQEEBAMCAQYw
- DQYJKoZIhvcNAQEFBQADggEBAHQGoCe+8ZIixzuwM7IpGuG728ckqblGpK+kiGMr
- MCMI5iMKo+NnGgUp8yUGk76mV/FrLMaIcjA3PJRPWML33yH2hZau+43mh9x9qZi2
- Wd/qOxI7/k1GUHZGCocAjdB9cp/LSDAff8js0AlCOFsfZ6AajwSpo6q2fPooTQDm
- U73lqGUQEBcnZJ7Yz0yulUamtQvKQhPfreiRHwokSiyzkCqDGO36gGOQ3g1FeTUR
- qONKFGiF6rttiQ3ZBNgQTK0v8nmpBuOcocNvTzMauQLgQOB719X0aWdCisqPV5NS
- lI5MJvn+anLVk9OzAULuCvfOEHYBiYePDo943+JtGirMT1E=
- -----END CERTIFICATE-----
PereUbuCle.pem
- -----BEGIN RSA PRIVATE KEY-----
- Proc-Type: 4,ENCRYPTED
- DEK-Info: DES-EDE3-CBC,4D9059B654C3EA93
- MN7eLnDfZE5PhhaHImzdOO5UYyf8Naw4FNWpm/mdWyTfyRgyrhVoQAeoJD68C37a
- Zkg0oITPoe9OTMv+rqQpBdMI0FE9LaFWhjY3Q/2ZFvoItcNN2DWLWPzAOdlkJUJu
- tVVM0yQ/2taETUVErU6EqjjZDCF7X+m4IJTRpRsp2sKIZRJvpxRoINlH9yTb8HOe
- xJQIDJdZi6U9r5wM6pK4SVYrJwkga1tMaHyQb/O1PuZdNQyOe+Ssr4LvFHkb1mKE
- CCpsOAEc4YzuKNlxfOPuCgCQPTMCp81D/fu0iOk8QC8uaXT8f2e114TPFp5LQlBI
- GrQn95JEE4eaXmSCbrnzVpicqi90jC3pz23jDaM36EZnzFGiMgLNUyBDB1gscQ6i
- JXsRPbDhRUvikwjZn7A8CrFmZpf0oZa9qv/BtaLBEVjGGKyVLCwL/0qCbgYHnD1U
- HSZS2YPS/ybr478thTP8b1QIhzbkkdy8tObhfZ8m3r4thFZXX6STBahuxuALheXs
- 2LlpZLRXpX9HhGjsP5GW8y1NFhNzL/e5T6pw/3EvaP6ez5isfrR0XVq/a9iGjt4/
- NSFUnQgXRbEwuPD1+EGQ+STSBpdxmf5Z/3pVlWeCB1ZKBb3PKy6EYmnXimBlMVGL
- D7Qq70GrY9LE5NEBbKGf07UwCJ09/mTVUp390pz/E+BscYXVLabGhAGYBBW8nKTY
- neDVjZa1QBI89ywrLvrXeNca5Vyoz/IiW/Bg/1QOkIjztPmDY/yi7/fQPuiai6Ag
- GpWaGZ60UEiBjX4/pkNR0c0p82/GWDlFWyNbKDNy8t1/qnnMtU3e7u7uJ3IA1jc4
- 1TpjFLtjMklepkR+Gc9EvrGil6Ip1W9qp3LolldEFBGVD7BCgLaMN7Yeo7+f2ch0
- XvAKPfFyulaGp2N6Q7urLtkxYmHnZqAKwr1exLwT1LHYBepmxNUokpgEbI167b90
- EB6X47rVb5YDbp5ro/8rVo7jzKrbkdA0vTFbmKYGwmlN9wFpC+K5S7uoGhVGtJ7A
- kMCiRqRlGCJa8+5ALPkfWNSp9c3O+DH28lrB18okF54gNmR65BFp8rlseL/jdvdO
- tL2WWFoJB8vt0J1JJ5Frvrf1pr2iKqSdoH2l8U4GArvb9lfIZUL4TeVYCctIX8rH
- iJN1VYg8cie20LBERNfowuG6kMoFg+ekqG4/untcXJ1q/hBeq17rY8eOuIn7N2hz
- NVRrkLETrwDIzJOWVGlYt2kdC3XK5Zs+X03ofQXKETA2IxL+O8F1dPRMPZDJRSde
- CmbiTiUgZs6OOXU3KxJs1CnyaA5U0UL385S/DtXY+UiwYEF9+HPi7dxINve0bbtc
- Fx5TVBcECr2Wu+EU24Xc+XqdofvcWxmAGDoIa+4fzFDwrCRPHRKUS51/BLSAg8QO
- Sb+AEImPjdbEjXhbkxTD0BLY4K+eQRewi6qbSXSO3udMuDVcIaR0LuzenOCjeA2v
- AeBn0uDCNi4YtB815OLtKhbJFIQn2tmCC+HLDexhPM0oQViRbJe8EXRrSjUeNYqb
- f2Gi1qz+EQ2f2feMQmEHTCqMigcbVGWYfs85nH4dZxkt8E2fwPmMbckq4vMk5vRt
- -----END RSA PRIVATE KEY-----
然后創(chuàng)建一個文件PereUbu.srl
, 包含一行我們證書的序列號:
例如:
91:d6:18:dc:24:c0:a3:24
保存這個CA證書及它的密匙后,我們可以創(chuàng)建我們自己的證書了
$ openssl x509 -days 10 <有效時間> -CAserial <序列號文件> -CA <CA證書文件> -CAkey <CA證書的密匙> -in <證書申請.pem> -req -out <證書.pem>
- $ openssl x509 -days 10 -CAserial PereUbu.srl -CA PereUbuCertif.pem -CAkey PereUbuCle.pem -in maRequete.pem -req -out monCertif.pem
已經(jīng)完成,現(xiàn)在我們可以來檢查一下我們的證書是否有效
$ openssl verify -CAfile PereUbuCertif.pem monCertif.pem
8.介紹一下如何用獲得的證書對自己的郵件簽名發(fā)送到對方
假設(shè): 我們郵件的內(nèi)容保存在 blabla.txt
中, 那么我們可以用一行命令就可以發(fā)送該郵件并附上簽名
$ openssl smime -sign -in <郵件內(nèi)容文件 blabla.txt>
-signer monCertif.pem -inkey maCle.pem -from <自己的郵箱地址>
-to <對方郵箱地址>
-subject "郵件主題"
也可以用 -out
選項講郵件內(nèi)容輸出到一個文件,然后通過郵箱操作發(fā)送
而作為接收郵件的一方,如何檢查郵件內(nèi)容是否被篡改呢?
$ openssl smime -verify -in <受到的簽名郵件 courrier.signe> /
-signer <郵件附件中的發(fā)送方的證書> /
-CAfile <CA頒發(fā)機構(gòu)的證書PereUbuCertif.pem>
每次發(fā)送,接收郵件都用命令,肯定是不方便的,所以我們可以講我們的證書加載到瀏覽器中,這樣就方便多了。 但是本人建議還是使用郵件桌面軟件方便,比如說Ubuntu下自帶的“Evolution郵件”支持自己的簽名,只要導(dǎo)入證書稍微設(shè)置一番,以后發(fā)送簽名郵件就更正常郵件一樣方便,這里就不多介紹了
有錯誤的地方,希望大家指正
|