亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 112230 | 回復: 68
打印 上一主題 下一主題

[Web] openssl的man中文文檔(轉(zhuǎn)) [復制鏈接]

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2005-01-07 09:25 |只看該作者 |倒序瀏覽
    標 題: openssl簡介--前言
   
    發(fā)信站: BBS 水木清華站 (Fri Nov 10 20:19:30 2000)  

   
   
    不久前接到有關(guān)ssl的活, 結(jié)果找遍中文網(wǎng)站資料實在奇缺。感覺是好象現(xiàn)在國內(nèi)做這個技術(shù)的人不多所有有興趣寫點東西來介紹一下。
   
    我使用的ssl的toolkit是openssl就用openssl做例子來講解
    openssl實在太大了,指令也多,API也多,更嚴重的是 它的API沒有說明。我打算漫漫說清楚其主要指令的用法,主要API的中文說明,以及使用/編程的方法。   
         
    工作量很大,因為我接觸它也沒幾個月,現(xiàn)在大概 完成了1/10吧, 先把目前自己的一些心得,找到的資料 和一些翻譯出來的東西貼出來,希望對研究ssl的人有幫助




openssl簡介-證書
http://72891.cn/forum/viewtopic.php?p=3161562#3161585

openssl簡介-加密算法
http://72891.cn/forum/viewtopic.php?p=3161562#3161685

openssl簡介-協(xié)議       
http://72891.cn/forum/viewtopic.php?p=3161562#3161727

openssl簡介-入門       
http://72891.cn/forum/viewtopic.php?p=3161562#3162073

openssl簡介-指令 verify
http://72891.cn/forum/viewtopic.php?p=3161562#3173096
       
openssl簡介-指令asn1parse       
http://72891.cn/forum/viewtopic.php?p=3161562#3173120

openssl簡介-指令ca       
http://72891.cn/forum/viewtopic.php?p=3173126#3173126
       
openssl簡介-指令cipher
http://72891.cn/forum/viewtopic.php?p=3173132#3173132
       
openssl簡介-指令dgst
http://72891.cn/forum/viewtopic.php?p=3173136#3173136
       
openssl簡介-指令dhparam
http://72891.cn/forum/viewtopic.php?p=3173142#3173142
       
openssl簡介-指令enc
http://72891.cn/forum/viewtopic.php?p=3173146#3173146
       
openssl簡介-指令gendsa
http://72891.cn/forum/viewtopic.php?p=3173149#3173149
       
openssl簡介-指令genrsa       
http://72891.cn/forum/viewtopic.php?p=3173152#3173152

openssl簡介-指令passwd       
http://72891.cn/forum/viewtopic.php?p=3173154#3173154

openssl簡介-指令pkcs7
http://72891.cn/forum/viewtopic.php?p=3173156#3173156
       
openssl簡介-指令rand
http://72891.cn/forum/viewtopic.php?p=3173158#3173158
       
openssl簡介-指令req       
http://72891.cn/forum/viewtopic.php?p=3173162#3173162
       
openssl簡介-指令rsa
http://72891.cn/forum/viewtopic.php?p=3173164#3173164
       
openssl簡介-指令rsautl
http://72891.cn/forum/viewtopic.php?p=3173168#3173168
       
openssl簡介-指令s_client
http://72891.cn/forum/viewtopic.php?p=3173171#3173171

openssl簡介-指令s_server       
http://72891.cn/forum/viewtopic.php?p=3173175#3173175

openssl簡介-指令sess_id       
http://72891.cn/forum/viewtopic.php?p=3173176#3173176

openssl簡介-指令speed       
http://72891.cn/forum/viewtopic.php?p=3173178#3173178

openssl簡介-指令version       
http://72891.cn/forum/viewtopic.php?p=3173181#3173181

openssl簡介-指令x509
http://72891.cn/forum/viewtopic.php?p=3173188#3173188

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
2 [報告]
發(fā)表于 2005-01-07 09:29 |只看該作者

openssl的man中文文檔(轉(zhuǎn))

標題penssl簡介--證書

發(fā)信站:BBS水木清華站(FriNov1020:29:282000)

引用請指明原作譯者fordesign@21cn.com

二證書



證書就是數(shù)字化的文件,里面有一個實體(網(wǎng)站,個人等)的公共密鑰和其他的屬性,如名稱等。該公共密鑰只屬于某一個特定的實體,它的作用是防止一個實體假裝成另外一個實體。

證書用來保證不對稱加密算法的合理性。想想吧,如果沒有證書記錄,那么假設(shè)某倆人A與B的通話過程如下:

這里假設(shè)A的publickey是K1,privatekey是K2,B的publickey是K3,privatekey是K4

xxxxxx(kn)表示用kn加密過的一段文字xxxxxx

A-----〉hello(plaintext)-------------〉B
A〈---------hello(plaintext)〈---------B
A〈---------Bspublickey〈------------B
A---------〉spublickey(K1)--------〉B
......



如果C想假裝成B,那么步驟就和上面一樣。
A-----〉hello(plaintext)-------------〉C
A〈---------hello(plaintext)〈---------C

注意下一步,因為A沒有懷疑C的身份,所以他理所當然的接受了C的publickey,并且使用這個key來繼續(xù)下面的通信。

A〈---------Cspublickey〈------------C
A---------〉A(chǔ)spublickey(K1)--------〉C
......

這樣的情況下A是沒有辦法發(fā)覺C是假的。如果A在通話過程中要求取得B的證書,并且驗證證書里面記錄的名字,如果名字和B的名字不符合,就可以發(fā)現(xiàn)對方不是B.驗證B的名字通過再從證書里面提取B的公用密鑰,繼續(xù)通信過程。


那么,如果證書是假的怎么辦?或者證書被修改過了怎么辦?慢慢看下來吧。


證書最簡單的形式就是只包含有證書擁有者的名字和公用密鑰。當然現(xiàn)在用的證書沒這么簡單,里面至少還有證書過期的deadline,頒發(fā)證書的機構(gòu)名稱,證書系列號,和一些其他可選的信息。最重要的是,它包含了證書頒發(fā)機構(gòu)(certificationauthority簡稱CA)的簽名信息。

我們現(xiàn)在常用的證書是采用X.509結(jié)構(gòu)的,這是一個國際標準證書結(jié)構(gòu)。任何遵循該標準的應用程序都可以讀,寫X509結(jié)構(gòu)的證書。

通過檢查證書里面的CA的名字,和CA的簽名,就知道這個證書的確是由該CA簽發(fā)的然后,你就可以簡單證書里面的接收證書者的名字,然后提取公共密鑰。這樣做建立的基礎(chǔ)是,你信任該CA,認為該CA沒有頒發(fā)錯誤的證書。

CA是第三方機構(gòu),被你信任,由它保證證書的確發(fā)給了應該得到該證書的人。CA自己有一個龐大的publickey數(shù)據(jù)庫,用來頒發(fā)給不同的實體。

這里有必要解釋一下,CA也是一個實體,它也有自己的公共密鑰和私有密鑰,否則怎么做數(shù)字簽名?它也有自己的證書,你可以去它的站點down它的證書得到它的公共密鑰。

一般CA的證書都內(nèi)嵌在應用程序中間。不信你打開你的IE,在internet選項里面選中"內(nèi)容",點擊"證書",看看那個"中間證書發(fā)行機構(gòu)"和"委托根目錄發(fā)行機構(gòu)",是不是有一大堆CA的名稱?也有時CA的證書放在安全的數(shù)據(jù)庫里面。

當你接受到對方的證書的時候,你首先會去看該證書的CA,然后去查找自己的CA證書數(shù)據(jù)庫,看看是否找的到,找不到就表示自己不信任該CA,那么就告吹本次連接。找到了的話就用該CA的證書里面的公用密鑰去檢查CA在證書上的簽名。

這里又有個連環(huán)的問題,我怎么知道那個CA的證書是屬于那個CA的?人家不能造假嗎?

解釋一下吧。CA也是分級別的。最高級別的CA叫RootCAs,其他cheap一點的CA的證書由他們來頒發(fā)和簽名。這樣的話,最后的保證就是:我們信任RootCAs.那些有RootCAs簽名過的證書的CA就可以來頒發(fā)證書給實體或者其他CA了。

你不信任RootCAs?人民幣由中國人民銀行發(fā)行,運到各個大銀行,再運到地方銀行,你從地方銀行取人民幣的時候不信任發(fā)行它的中國人民銀行嗎?RootCAs都是很權(quán)威的機構(gòu),沒有必要擔心他們的信用。

那RootCAs誰給簽名?他們自己給自己簽名,叫自簽名.

說了這么多,舉個certificate的例子吧,對一些必要的item解釋一下。

CertificateExample
Certificate:
Data:
Version:1(0x0)
SerialNumber://系列號
02:41:00:00:16
SignatureAlgorithm:md2WithRSAEncryption//CA同志的數(shù)字簽名的算法
Issuer:C=US,O=RSADataSecurity,Inc.,OU=Commercial//CA自報家門
Certification
Authority
Validity
NotBefore:Nov418:58:341994GMT//證書的有效期
NotAfter:Nov318:58:341999GMT
Subject:C=US,O=RSADataSecurity,Inc.,OU=Commercial
CertificationAuthority
SubjectPublicKeyInfo:
PublicKeyAlgorithm:rsaEncryption
RSAPublicKey1000bit)
Modulus(1000bit):
00:a4:fb:81:62:7b:ce:10:27:dd:e8:f7:be:6c:6e:
c6:70:99:db:b8:d5:05:03:69:28:82:9c:72:7f:96:
3f:8e:ec:ac:29:92:3f:8a:14:f8:42:76:be:bd:5d:
03:b9:90:d4:d0:bc:06:b2:51:33:5f:c4:c2:bf:b6:
8b:8f:99:b6:62:22:60:dd:db:df:20:82:b4:ca:a2:
2f:2d:50:ed:94:32:de:e0:55:8d:d4:68:e2:e0:4c:
d2:cd:05:16:2e:95:66:5c:61:52:38:1e:51:a8:82:
a1:c4:ef:25:e9:0a:e6:8b:2b:8e:31:66:d9:f8:d9:
fd:bd:3b:69:d9:eb
Exponent:65537(0x10001)
SignatureAlgorithm:md2WithRSAEncryption
76:b5:b6:10:fe:23:f7:f7:59:62:4b:b0:5f:9c:c1:68:bc:49:
bb:b3:49:6f:21:47:5d:2b:9d:54:c4:00:28:3f:98:b9:f2:8a:
83:9b:60:7f:eb:50:c7:ab:05:10:2d:3d:ed:38:02:c1:a5:48:
d2:fe:65:a0:c0:bc:ea:a6:23:16:66:6c:1b:24:a9:f3:ec:79:
35:18:4f:26:c8:e3:af:50:4a:c7:a7:31:6b:d0:7c:18:9d:50:
bf:a9:26:fa:26:2b:46:9c:14:a9:bb:5b:30:98:42:28:b5:4b:
53:bb:43:09:92:40:ba:a8:aa:5a:a4:c6:b6:8b:57:4d:c5

其實這是我們看的懂的格式的證書內(nèi)容,真正的證書都是加密過了的,如下:



-----BEGINCERTIFICATE-----

MIIDcTCCAtqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBiDELMAkGA1UEBhMCQ0gx

EjAQBgNVBAgTCWd1YW5nZG9uZzESMBAGA1UEBxMJZ3Vhbmd6aG91MREwDwYDVQQK

Ewhhc2lhaW5mbzELMAkGA1UECxMCc3cxDjAMBgNVBAMTBWhlbnJ5MSEwHwYJKoZI

hvcNAQkBFhJmb3JkZXNpZ25AMjFjbi5jb20wHhcNMDAwODMwMDc0MTU1WhcNMDEw

ODMwMDc0MTU1WjCBiDELMAkGA1UEBhMCQ0gxEjAQBgNVBAgTCWd1YW5nZG9uZzES

MBAGA1UEBxMJZ3Vhbmd6aG91MREwDwYDVQQKEwhhc2lhaW5mbzELMAkGA1UECxMC

c3cxDjAMBgNVBAMTBWhlbnJ5MSEwHwYJKoZIhvcNAQkBFhJmb3JkZXNpZ25AMjFj

bi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMDYArTAhLIFacYZwP30

Zu63mAkgpAjVHaIsIEJ6wySIZl2THEHjJ0kS3i8lyMqcl7dUFcAXlLYi2+rdktoG

jBQMOtOHv1/cmo0vzuf38+NrAZSZT9ZweJfIlp8W9uyz8Dv5hekQgXFg/l3L+HSx

wNvQalaOEw2nyf45/np/QhNpAgMBAAGjgegwgeUwHQYDVR0OBBYEFKBL7xGeHQSm

ICH5wBrOiqNFiildMIG1BgNVHSMEga0wgaqAFKBL7xGeHQSmICH5wBrOiqNFiild

oYGOpIGLMIGIMQswCQYDVQQGEwJDSDESMBAGA1UECBMJZ3Vhbmdkb25nMRIwEAYD

VQQHEwlndWFuZ3pob3UxETAPBgNVBAoTCGFzaWFpbmZvMQswCQYDVQQLEwJzdzEO

MAwGA1UEAxMFaGVucnkxITAfBgkqhkiG9w0BCQEWEmZvcmRlc2lnbkAyMWNuLmNv

bYIBADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4GBAGQa9HK2mixM7ML7

0jZr1QJUHrBoabX2AbDchb4Lt3qAgPOktTc3F+K7NgB3WSVbdqC9r3YpS23RexU1

aFcHihDn73s+PfhVjpT8arC1RQDg9bDPvUUYphdQC0U+HF72/CvxGCTqpnWiqsgw

xqeog0A8H3doDrffw8Zb7408+Iqf

-----ENDCERTIFICATE-----



證書都是有壽命的。就是上面的那個NotBefore和NotAfter之間的日子。過期的證書,如果沒有特殊原因,都要擺在證書回收列(certificaterevocationlist)里面.證書回收列,英文縮寫是CRL.比如一個證書的key已經(jīng)被破了,或者證書擁有者沒有權(quán)力再使用該證書,該證書就要考慮作廢。CRL詳細記錄了所有作廢的證書。

CRL的缺省格式是PEM格式。當然也可以輸出成我們可以讀的文本格式。下面有個CRL的例子。



-----BEGINX509CRL-----

MIICjTCCAfowDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMxIDAeBgNVBAoT

F1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2VydmVy

IENlcnRpZmljYXRpb24gQXV0aG9yaXR5Fw05NTA1MDIwMjEyMjZaFw05NTA2MDEw

MDAxNDlaMIIBaDAWAgUCQQAABBcNOTUwMjAxMTcyNDI2WjAWAgUCQQAACRcNOTUw

MjEwMDIxNjM5WjAWAgUCQQAADxcNOTUwMjI0MDAxMjQ5WjAWAgUCQQAADBcNOTUw

MjI1MDA0NjQ0WjAWAgUCQQAAGxcNOTUwMzEzMTg0MDQ5WjAWAgUCQQAAFhcNOTUw

MzE1MTkxNjU0WjAWAgUCQQAAGhcNOTUwMzE1MTk0MDQxWjAWAgUCQQAAHxcNOTUw

MzI0MTk0NDMzWjAWAgUCcgAABRcNOTUwMzI5MjAwNzExWjAWAgUCcgAAERcNOTUw

MzMwMDIzNDI2WjAWAgUCQQAAIBcNOTUwNDA3MDExMzIxWjAWAgUCcgAAHhcNOTUw

NDA4MDAwMjU5WjAWAgUCcgAAQRcNOTUwNDI4MTcxNzI0WjAWAgUCcgAAOBcNOTUw

NDI4MTcyNzIxWjAWAgUCcgAATBcNOTUwNTAyMDIxMjI2WjANBgkqhkiG9w0BAQIF

AAN+AHqOEJXSDejYy0UwxxrH/9+N2z5xu/if0J6qQmK92W0hW158wpJg+ovV3+wQ

wvIEPRL2rocL0tKfAsVq1IawSJzSNgxG0lrcla3MrJBnZ4GaZDu4FutZh72MR3Gt

JaAL3iTJHJD55kK2D/VoyY1djlsPuNh6AEgdVwFAyp0v

-----ENDX509CRL-----





下面是文本格式的CRL的例子。

ThefollowingisanexampleofaCRLintextformat:

issuer=/C=US/O=RSADataSecurity,Inc./OU=SecureServerCertification

Authority

lastUpdate=May202:12:261995GMT

nextUpdate=Jun100:01:491995GMT

revoked:serialNumber=027200004CrevocationDate=May202:12:261995GMT

revoked:serialNumber=0272000038revocationDate=Apr2817:27:211995GMT

revoked:serialNumber=0272000041revocationDate=Apr2817:17:241995GMT

revoked:serialNumber=027200001ErevocationDate=Apr800:02:591995GMT

revoked:serialNumber=0241000020revocationDate=Apr701:13:211995GMT

revoked:serialNumber=0272000011revocationDate=Mar3002:34:261995GMT

revoked:serialNumber=0272000005revocationDate=Mar2920:07:111995GMT

revoked:serialNumber=024100001FrevocationDate=Mar2419:44:331995GMT

revoked:serialNumber=024100001ArevocationDate=Mar1519:40:411995GMT

revoked:serialNumber=0241000016revocationDate=Mar1519:16:541995GMT

revoked:serialNumber=024100001BrevocationDate=Mar1318:40:491995GMT

revoked:serialNumber=024100000CrevocationDate=Feb2500:46:441995GMT

revoked:serialNumber=024100000FrevocationDate=Feb2400:12:491995GMT

revoked:serialNumber=0241000009revocationDate=Feb1002:16:391995GMT

revoked:serialNumber=0241000004revocationDate=Feb117:24:261995GMT



總結(jié)一下X.509證書是個什么東東吧。它實際上是建立了公共密鑰和某個實體之間聯(lián)系的數(shù)字化的文件。它包含的內(nèi)容有:

版本信息,X.509也是有三個版本的。

系列號
證書接受者名稱
頒發(fā)者名稱
證書有效期
公共密鑰
一大堆的可選的其他信息
CA的數(shù)字簽名

證書由CA頒發(fā),由CA決定該證書的有效期,由該CA簽名。每個證書都有唯一的系列號。證書的系列號和證書頒發(fā)者來決定某證書的唯一身份。

openssl有四個驗證證書的模式。你還可以指定一個callback函數(shù),在驗證證書的時候會自動調(diào)用該callback函數(shù)。這樣可以自己根據(jù)驗證結(jié)果來決定應用程序的行為。具體的東西在以后的章節(jié)會詳細介紹的。

openssl的四個驗證證書模式分別是:

SSL_VERIFY_NONE:完全忽略驗證證書的結(jié)果。當你覺得握手必須完成的話,就選用這個選項。其實真正有證書的人很少,尤其在中國。那么如果SSL運用于一些免費的服務(wù),比如email的時候,我覺得server端最好采用這個模式。

SSL_VERIFY_PEER:希望驗證對方的證書。不用說這個是最一般的模式了.對client來說,如果設(shè)置了這樣的模式,驗證server的證書出了任何錯誤,SSL握手都告吹.對server來說,如果設(shè)置了這樣的模式,client倒不一定要把自己的證書交出去。如果client沒有交出證書,server自己決定下一步怎么做。

SSL_VERIFY_FAIL_IF_NO_PEER_CERT:這是server使用的一種模式,在這種模式下,server會向client要證書。如果client不給,SSL握手告吹。

SSL_VERIFY_CLIENT_ONCE:這是僅能使用在sslsessionrenegotiation階段的一種方式。什么是SSLsessionrenegotiation?以后的章節(jié)再解釋。我英文差點,覺得這個詞組也很難翻譯成相應的中文。以后的文章里,我覺得很難直接翻譯的單詞或詞組,都會直接用英文寫出來。如果不是用這個模式的話,那么在regegotiation的時候,client都要把自己的證書送給server,然后做一番分析。這個過程很消耗cpu時間的,而這個模式則不需要client在regotiation的時候重復送自己的證書了。

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
3 [報告]
發(fā)表于 2005-01-07 09:47 |只看該作者

openssl的man中文文檔(轉(zhuǎn))

標題penssl簡介--加密算法

發(fā)信站:BBS水木清華站(FriNov1020:24:102000)

引用請指明原作/譯者fordesign@21cn.com



一加密算法的一些常識


要理解ssl先要知道一些加密算法的常識.


加密算法很容易理解啦,就是把明文變成人家看不懂的東西,然后送給自己想要的送到的地方,接收方用配套的解密算法又把密文解開成明文,這樣就不怕在路世上如果密文給人家截獲而泄密。

加密算法有倆大類,第一種是不基于KEY的,舉個簡單的例子,我要加密"fordesign"這么一串字符,就把每個字符都變成它的后一個字符,那么就是"gpseftjhm"了,這樣的東西人家當然看不明白,接收方用相反的方法就可以得到原文。當然這只是個例子,現(xiàn)在應該沒人用這么搞笑的加密算法了吧。

不基于KEY的加密算法好象一直用到了計算機出現(xiàn)。我記得古中國軍事機密都是用這種方式加密的。打戰(zhàn)的時候好象軍隊那些電報員也要帶著密碼本,也應該是用這種方式加密的。這種算法的安全性以保持算法的保密為前提。

這種加密算法的缺點太明顯了,就是一旦你的加密算法給人家知道,就肯定掛。日本中途島慘敗好象就是密碼給老米破了。設(shè)計一種算法是很麻煩的,一旦給人破了就沒用了,這也忑浪費。

我們現(xiàn)在使用的加密算法一般是基于key的,也就是說在加密過程中需要一個key,用這個key來對明文進行加密。這樣的算法即使一次被破,下次改個key,還可以繼續(xù)用。

key是一個什么東西呢?隨便你,可以是一個隨機產(chǎn)生的數(shù)字,或者一個單詞,啥都行,只要你用的算法認為你選來做key的那玩意合法就行。

這樣的算法最重要的是:其安全性取決于key,一般來說取決于key的長度。也就是說應該保證人家在知道這個算法而不知道key的情況下,破解也相當困難。其實現(xiàn)在常用的基于KEY的加密算法在網(wǎng)絡(luò)上都可以找到,很多革命同志(都是老外)都在想辦法破解基于key的加密算法又包括倆類:對稱加密和不對稱加密。對稱加密指的是雙方使用完全相同的key,最常見的是DES.DES3,RC4等。對稱加密算法的原理很容易理解,通信一方用KEK加密明文,另一方收到之后用同樣的KEY來解密就可以得到明文。

不對稱加密指雙方用不同的KEY加密和解密明文,通信雙方都要有自己的公共密鑰和私有密鑰。舉個例子比較容易理解,我們們假設(shè)通信雙方分別是A,B.
A,擁有KEY_A1,KEY_A2,其中KEY_A1是A的私有密鑰,KEY_A2是A的公共密鑰。
B,擁有KEY_B1,KEY_B2,其中KEY_B1是B的私有密鑰,KEY_B2是B的公共密鑰。

公共密鑰和私有密鑰的特點是,經(jīng)過其中任何一把加密過的明文,只能用另外一把才能夠解開。也就是說經(jīng)過KEY_A1加密過的明文,只有KEY_A2才能夠解密,反之亦然。

通信過程如下:

A-------->;KEY_A2------------>;B
A<--------KEY_B2<------------A

這個過程叫做公共密鑰交換,老外管這叫keyexchange.之后A和B就分別用對方的公共密鑰加密,用自己的私有密鑰解密。

一般公共密鑰是要發(fā)布出去的,然后你通過自己的私有密鑰加密明文,人家用你的公共密鑰解密,如果能解開,那么說明你是加密人,這就是SSL使用的驗證機制。

常用的不對稱加密一般有RSA,DSA,DH等。我們一般使用RSA.

數(shù)字簽名也是不對稱加密算法的一個重要應用,理解它對于理解SSL很重要的,放在這里一起介紹一下。


簽名是什么大家都很熟悉吧?證明該東西是你寫的,是你發(fā)布的,你就用簽名搞定。看看那些重要文件都要頭頭簽名。數(shù)字簽名就是數(shù)字化的簽名了。記得公用密鑰和私有密鑰的特征嗎?只有你一個人有你自己的私有密鑰。而你的公用密鑰是其他人都知道的了。那么你在寫完一封郵件之后,用自己的私有密鑰加密自己的名字,接收人用你的公共密鑰解開一看,哦,是你發(fā)的。這就是你的數(shù)字簽名過程了。

上面的解釋是很簡化的了,其實數(shù)字簽名比這個復雜多了,但我們沒有了解的必要,知道數(shù)字簽名是這么一回事就可以了。


還有一種我們需要知道的加密算法,其實我不覺得那是加密算法,應該叫哈希算法,英文是messagedigest,是用來把任何長度的一串明文以一定規(guī)則變成固定長度的一串字符串。它在SSL中的作用也很重要,以后會慢慢提及的。一般使用的是MD5,SHA.

base64不是加密算法,但也是SSL經(jīng)常使用的一種算法,它是編碼方式,用來把asc碼和二進制碼轉(zhuǎn)來轉(zhuǎn)去的。

具體的加密解密過程我們不需要了解,因為SSL根本不關(guān)心。但了解加密算法的一些基本原理是必要的,否則很難理解SSL。

對加密算法的細節(jié)有興趣的同志,可以去網(wǎng)絡(luò)上找這些加密算法的原理的文章和實現(xiàn)的程序來研究,不過先學數(shù)論吧。

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
4 [報告]
發(fā)表于 2005-01-07 09:55 |只看該作者

openssl的man中文文檔(轉(zhuǎn))

標題penssl簡介--協(xié)議

發(fā)信站:BBS水木清華站(FriNov1020:30:492000)

引用請指明原作/譯者fordesign@21cn.com



SSL(SecureSocketLayer)是netscape公司提出的主要用于web的安全通信標準,分為2.0版和3.0版.TLS(TransportLayerSecurity)是IETF的TLS工作組在SSL3.0基礎(chǔ)之上提出的安全通信標準,目前版本是1.0,即RFC2246.SSL/TLS提供的安全機制可以保證應用層數(shù)據(jù)在互聯(lián)網(wǎng)絡(luò)傳輸不被監(jiān)聽,偽造和竄改.

一般情況下的網(wǎng)絡(luò)協(xié)議應用中,數(shù)據(jù)在機器中經(jīng)過簡單的由上到下的幾次包裝,就進入網(wǎng)絡(luò),如果這些包被截獲的話,那么可以很容易的根據(jù)網(wǎng)絡(luò)協(xié)議得到里面的數(shù)據(jù).由網(wǎng)絡(luò)監(jiān)聽工具可以很容易的做到這一點。

SSL就是為了加密這些數(shù)據(jù)而產(chǎn)生的協(xié)議,可以這么理解,它是位與應用層和TCP/IP之間的一層,數(shù)據(jù)經(jīng)過它流出的時候被加密,再往TCP/IP送,而數(shù)據(jù)從TCP/IP流入之后先進入它這一層被解密,同時它也能夠驗證網(wǎng)絡(luò)連接倆端的身份。


它的主要功能就是倆個:
一:加密解密在網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)包,同時保護這些數(shù)據(jù)不被修改,和偽造。
二:驗證網(wǎng)絡(luò)對話中雙方的身份

SSL協(xié)議包含倆個子協(xié)議,一個是包協(xié)議,一個是握手協(xié)議。包協(xié)議是說明SSL的數(shù)據(jù)包應該如何封裝的。握手協(xié)議則是說明通信雙方如何協(xié)商共同決定使用什么算法以及算法使用的key。很明顯包協(xié)議位于握手協(xié)議更下一層。我們暫時對包協(xié)議的內(nèi)容沒有興趣。

SSL握手過程說簡單點就是:通信雙方通過不對稱加密算法來協(xié)商好一個對稱加密算法以及使用的key,然后用這個算法加密以后所有的數(shù)據(jù)完成應用層協(xié)議的數(shù)據(jù)交換。


握手一般都是由client發(fā)起的,SSL也不例外。

1client送給server它自己本身使用的ssl的version(ssl一共有三個version),加密算法的一些配置,和一些隨機產(chǎn)生的數(shù)據(jù),以及其他在SSL協(xié)議中需要用到的信息。

2server送給client它自己的SSL的version,加密算法的配置,隨機產(chǎn)生的數(shù)據(jù),還會用自己的私有密鑰加密SERVER-HELLO信息。Server還同時把自己的證書文件給送過去。同時有個可選的項目,就是server可以要求需要客戶的certificate。

3client就用server送過來的certificate來驗證server的身份。如果server身份驗證沒通過,本次通信結(jié)束。通過證書驗證之后,得到server的公共密鑰,解開server送來的被其用私有密鑰加密過的SERVER-HELLO信息,看看對頭與否。如果不對,說明對方只有該server的公共密鑰而沒有私有密鑰,必是假的。通信告吹。

4client使用到目前為止所有產(chǎn)生了的隨機數(shù)據(jù)(sharedsecret),client產(chǎn)生本次握手中的premastersecret(這個步驟是有可能有server的參與的,由他們使用的加密算法決定),并且把這個用server的公共密鑰加密,送回給server.如果server要求需要驗證client,那么client也需要自己把自己的證書送過去,同時送一些自己簽過名的數(shù)據(jù)過去。

SSL協(xié)議有倆種技術(shù)來產(chǎn)生sharedsecret(真不好意思,又是一個很難意譯的詞組),
一種是RSA,一種是EDH.

RSA就是我們上一章說過的一種不對稱加密算法。首先server把自己的RSA公共密鑰送給client,client于是用這個key加密一個隨機產(chǎn)生的值(這個隨機產(chǎn)生的值就是sharedsecret),再把結(jié)果送給server.

EDH也是一種不對稱加密算法,但它與RSA不同的是,它好象沒有自己固定的公共密鑰和私有密鑰,都是在程序跑起來的時候產(chǎn)生的,用完就K掉。其他的步驟倆者就差不多了。

RSA,DSA,DH三種不對稱加密算法的區(qū)別也就在這里。RSA的密鑰固定,后倆個需要一個參數(shù)來臨時生成key.DH甚至要求雙方使用同樣的參數(shù),這個參數(shù)要事先指定。如果SSL庫沒有l(wèi)oad進這個參數(shù),DH算法就沒辦法用。DSA沒研究過。

5Server驗證完client的身份之后,然后用自己的私有密鑰解密得到premastersecret然后雙方利用這個premastersecret來共同協(xié)商,得到mastersecret.

6雙方用master一起產(chǎn)生真正的sessionkey,著就是他們在剩下的過程中的對稱加密的key了。這個key還可以用來驗證數(shù)據(jù)完整性。雙方再交換結(jié)束信息。握手結(jié)束。

接下來雙方就可以用協(xié)商好的算法和key來用對稱加密算法繼續(xù)下面的過程了。

很簡單吧?其實要復雜一些的,我簡化了很多來說。

不過還是有個問題,喜歡搗蛋的人雖然看不懂他們在交流些什么,但篡改總可以吧?
記得我們在加密算法里面介紹過的哈希算法嗎?就是為了對付這種搗蛋者的。在每次送信息的時候,附帶把整條信息的哈希值也送過去,接收方收到信息的時候,也把收到的內(nèi)容哈希一把,然后和對方送來的哈希值對比一下,看看是否正確。搗蛋者如果亂改通信內(nèi)容,哈希出來的值是不同的,那么就很容易被發(fā)現(xiàn)了。


但這樣子,搗蛋者至少可以學舌。他可以把之前監(jiān)聽到的內(nèi)容重復發(fā)給某一方,而這些內(nèi)容肯定是正確的,無法驗證出有問題的。哎,SSL是怎么對付這種人的我還沒看出來。有篇文章說:多放點隨機數(shù)在信息里可以對付,我也沒去研究這句話是什么意思。

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
5 [報告]
發(fā)表于 2005-01-07 11:03 |只看該作者

openssl的man中文文檔(轉(zhuǎn))

openssl簡介-入門
實現(xiàn)了SSL的軟件不多,但都蠻優(yōu)秀的。首先,netscape自己提出來的概念,當然自己會實現(xiàn)一套了。netscape的技術(shù)蠻優(yōu)秀的,不過我沒用過他們的ssl-toolkit.甚至連名字都沒搞清楚。
    1995年,eric.young開始開發(fā)openssl, 那時候叫ssleay.一直到現(xiàn)在,openssl還在不停的修改和新版本的發(fā)行之中。openssl真夠大的,我真佩服eric的水平和興趣。這些open/free的斗士的精神是我寫這個系列的主要動力,雖然寫的挺煩的。
ps: eric現(xiàn)在去了RSA公司做,做了一個叫SSL-C的toolkit, 其實和openssl差不多。估計應該比openssl穩(wěn)定,區(qū)別是這個是要銀子的,而且?guī)缀跛械蛯拥暮瘮?shù)都不提供直接調(diào)用了。那多沒意思。
    去www.openssl.org down openssl吧,最新的是0.9.6版。
    安裝是很簡單的。我一直用的是sun sparc的機器,所以用sun sparc的機器做例子。
    gunzip -d openssl.0.9.6.tar.gz
    tar -xf openssl.0.9.6.tar
    mv openssl.0.9.6 openssl
    cd openssl
    ./configure --prefix=XXXXX --openssldir=XXXXXXXX
    (這里prefix是你想安裝openssl的地方, openssldir就是你tar開的openssl源碼的地方。好象所有的出名點的free software都是這個操行,configure, make , make test, make install, 搞定。)
    ./make(如果機器慢,這一步的時候可以去洗個澡,換套衣服)
    ./make test
    ./make install
    OK, 如果路上沒有什么問題的話,搞定。
    經(jīng)常有人報bug, 在hp-ux, sgi上裝openssl出問題,我沒試過,沒發(fā)言權(quán)。
    現(xiàn)在可以開始玩openssl了。
    注意: 我估計openssl最開始是在linux下開發(fā)的。大家可以看一看在linxu下有這么一個文件:/dev/urandom, 在sparc下沒有。這個文件有什么用?你可以隨時找它要一個隨機數(shù)。在加密算法產(chǎn)生key的時候,我們需要一顆種子:seed。這個seed就是找/dev/urandom要的那個隨機數(shù)。那么在sparc下,由于沒有這么一個設(shè)備,很多openssl的函數(shù)會報錯:"RNG not seeded". 解決方法是:在你的~/.profile里面添加一個變量$RANDFILE, 設(shè)置如下:
    $RANDFILE=$HOME/.rnd
    然后在$HOME下vi .rnd, 隨便往里面亂輸入一些字符,起碼倆行。
    很多openssl的函數(shù)都會把這個文件當seed, 除了openssl rsa, 希望openssl盡快修改這個bug.
    如果用openssl做toolkit編程, 則有其他不太安全的解決方法。以后講到openssl編程的章節(jié)會詳細介紹。
    先生成自己的私有密鑰文件,比如叫server.key
    openssl genrsa -des3 -out server.key 1024
    genras表示生成RSA私有密鑰文件,-des3表示用DES3加密該文件,1024是我們的key的長度。一般用512就可以了,784可用于商業(yè)行為了,1024可以用于軍事用途了。
    當然,這是基于現(xiàn)在的計算機的速度而言,可能沒過幾年1024是用于開發(fā)測試,2048用于一般用途了。
    生成server.key的時候會要你輸入一個密碼,這個密鑰用來保護你的server.key文件,這樣即使人家偷走你的server.key文件,也打不開,拿不到你的私有密鑰。
    openssl rsa -noout -text -in server.key
    可以用來看看這個key文件里面到底有些什么東西(不過還是看不懂)
    如果你覺得server.key的保護密碼太麻煩想去掉的話:
    openssl rsa -in server.key -out server.key.unsecure
    不過不推薦這么做
   
下一步要得到證書了。得到證書之前我們要生成一個Certificate Signing Request.
    CA只對CSR進行處理。
    openssl req -new -key server.key -out server.csr
    生成CSR的時候屏幕上將有提示,依照其指示一步一步輸入要求的信息即可.
    生成的csr文件交給CA簽名后形成服務(wù)端自己的證書.怎么交給CA簽名?
    自己去www.verisign.com慢慢看吧。
   
    如果是自己玩下,那么自己來做CA吧。openssl有很簡單的方法做CA.但一般只好在開發(fā)的時候或者自己玩的時候用,真的做出產(chǎn)品,還是使用正規(guī)的CA簽發(fā)給你的證書吧
    在你make install之后,會發(fā)現(xiàn)有個misc的目錄,進去,運行CA.sh -newca,他會找你要CA需要的一個CA自己的私有密鑰密碼文件。沒有這個文件?按回車創(chuàng)建,輸入密碼來保護這個密碼文件。之后會要你的一個公司信息來做CA.crt文件。最后在當前目錄下多了一個./demoCA這樣的目錄../demoCA/private/cakey.pem就是CA的key文件啦,
    ./demoCA/cacert.pem就是CA的crt文件了。把自己創(chuàng)建出來的server.crt文件copy到misc目錄下,mv成newreq.pem,然后執(zhí)行CA.sh -sign, ok,
    得到回來的證書我們命名為server.crt.
   
    看看我們的證書里面有些什么吧
    openssl x509 -noout -text -in server.crt
    玩是玩過了,openssl的指令繁多,就象天上的星星。慢慢一個一個解釋吧。

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
6 [報告]
發(fā)表于 2005-01-10 23:32 |只看該作者

openssl的man中文文檔(轉(zhuǎn))

openssl簡介-指令 verify
用法:
   
    openssl verify 【-CApath directory】 【-CAfile file】 【-purpose purpose】【-untrusted file】 【-help】 【-issuer_checks】 【-verbose】  【-】 【certificates】
   
     說明:
   
     證書驗證工具。

     
    選項
     -CApath directory
    我們信任的CA的證書存放目錄。這些證書的名稱應該是這樣的格式:
    xxxxxxxx.0( xxxxxxxx代表證書的哈希值。 參看x509指令的-hash)
    你也可以在目錄里touch一些這樣格式文件名的文件,符號連接到真正的證書。
    那么這個xxxxxxxx我怎么知道怎么得到?x509指令有說明。
    其實這樣子就可以了:
    openssl x509 -hash -in server.crt
   
    -CAfile file
    我們信任的CA的證書,里面可以有多個CA的證書。
   
    -untrusted file
    我們不信任的CA的證書。
   
    -purpose purpose
    證書的用途。如果這個option沒有設(shè)置,那么不會對證書的CA鏈進行驗證。
   
    現(xiàn)在這個option的參數(shù)有以下幾個:
    sslclinet
    sslserver
    nssslserver
    smimesign
    smimeencrypt
    等下會詳細解釋的。
   
    -help
    打印幫助信息。
   
-verbose
   
     打印出詳細的操作信息。
   
-issuer_checks
    打印出我們驗證的證書的簽發(fā)CA的證書的之間的聯(lián)系。
    要一次驗證多個證書,把那些證書名都寫在后面就好了。
        
    驗證操作解釋:
    S/MIME和本指令使用完全相同的函數(shù)進行驗證。
    我們進行的驗證和真正的驗證有個根本的區(qū)別:
    在我們對整個證書鏈進行驗證的時候,即使中途有問題,我們也會驗證到最后,而真實的驗證一旦有一個環(huán)節(jié)出問題,那么整個驗證過程就告吹。
    驗證操作包括幾個獨立的步驟。
    首先建立證書鏈,從我們目前的證書為基礎(chǔ),一直上溯到Root CA的證書.
    如果中間有任何問題,比如找不到某個證書的頒發(fā)者的證書,那么這個步驟就掛。有任何一個證書是字簽名的,就被認為是Root CA的證書。
    尋找一個證書的頒發(fā)CA也包過幾個步驟。在openssl0.9.5a之前的版本,如果一個證書的頒發(fā)者和另一個證書的擁有著相同,就認為后一個證書的擁有者就是前一個證書的簽名CA.
    openssl0.9.6及其以后的版本中,即使上一個條件成立,還要進行更多步驟的檢驗。包括驗證系列號等。到底有哪幾個我也沒看明白。
    得到CA的名稱之后首先去看看是否是不信任的CA, 如果不是,那么才去看看是否是信任的CA. 尤其是Root CA, 更是必須是在信任CA列表里面。
    現(xiàn)在得到鏈條上所有CA的名稱和證書了,下一步是去檢查第一個證書的用途是否和簽發(fā)時候批準的一樣。其他的證書則必須都是作為CA證書而頒發(fā)的。
    證書的用途在x509指令里會詳細解釋。
    過了第二步,現(xiàn)在就是檢查對Root CA的信任了?赡躌oot CA也是每個都負責不同領(lǐng)域的證書簽發(fā)。缺省的認為任何一個Root CA都是對任何用途的證書有簽發(fā)權(quán)。
    最后一步,檢查整條證書鏈的合法性。比如是否有任何一個證書過期了?簽名是否是正確的?是否真的是由該證書的頒發(fā)者簽名的?
    任何一步出問題,所有該證書值得懷疑,否則,證書檢驗通過。
   
     如果驗證操作有問題了,那么打印出來的結(jié)果可能會讓人有點模糊。
    一般如果出問題的話,會有類似這樣子的結(jié)果打印出來:
    server.pem: /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
    error 24 at 1 depth lookup:invalid CA certificate
    第一行說明哪個證書出問題,后面是其擁有者的名字,包括幾個字段。
    第二行說明錯誤號,驗證出錯在第幾層的證書,以及錯誤描述。
    下面是錯誤號及其描述的詳細說明,注意,有的錯誤雖然有定義,
    但真正使用的時候永遠不會出現(xiàn)。用unused標志.
    0 X509_V_OK
    驗證操作沒有問題
    2 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
    找不到該證書的頒發(fā)CA的證書。
    3 X509_V_ERR_UNABLE_TO_GET_CRL (unused)
   找不到和該證書相關(guān)的CRL
   4 X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE
   無法解開證書里的簽名。
    5 X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE (unused)
    無法解開CRLs的簽名。
    6 X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY
    無法得到證書里的公共密鑰信息。
    7 X509_V_ERR_CERT_SIGNATURE_FAILURE
    證書簽名無效
    8 X509_V_ERR_CRL_SIGNATURE_FAILURE (unused)
    證書相關(guān)的CRL簽名無效
    9 X509_V_ERR_CERT_NOT_YET_VALID
    證書還沒有到有效開始時間
    10 X509_V_ERR_CRL_NOT_YET_VALID (unused)
    與證書相關(guān)的CRL還沒有到有效開始時間
    11 X509_V_ERR_CERT_HAS_EXPIRED
    證書過期
    12 X509_V_ERR_CRL_HAS_EXPIRED (unused)
    與證書相關(guān)的CRL過期
    13 X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD
    證書的notBefore字段格式不對,就是說那個時間是非法格式。
    14 X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD
    證書的notAfter字段格式不對,就是說那個時間是非法格式。
    15 X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD (unused)
    CRL的lastUpdate字段格式不對。
    16 X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD (unused)
    CRL的nextUpdate字段格式不對
    17 X509_V_ERR_OUT_OF_MEM
    操作時候內(nèi)存不夠。這和證書本身沒有關(guān)系。
    18 X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT
    需要驗證的第一個證書就是字簽名證書,而且不在信任CA證書列表中。
    19 X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN
    可以建立證書鏈,但在本地找不到他們的根??
   
    : self signed certificate in certificate chain
    the certificate chain could be built up using the untrusted certificates
    but the root could not be found locally.
    20 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY
    有一個證書的簽發(fā)CA的證書找不到。這說明可能是你的Root CA的證書列表不齊全。
    21 X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE
    證書鏈只有一個item, 但又不是字簽名的證書。
    22 X509_V_ERR_CERT_CHAIN_TOO_LONG (unused)
    證書鏈太長。
    23 X509_V_ERR_CERT_REVOKED (unused)
    證書已經(jīng)被CA宣布收回。
    24 X509_V_ERR_INVALID_CA
    某CA的證書無效。
    25 X509_V_ERR_PATH_LENGTH_EXCEEDED
    參數(shù)basicConstraints pathlentgh超過規(guī)定長度
    26 X509_V_ERR_INVALID_PURPOSE
    提供的證書不能用于請求的用途。
    比如鏈條中某個證書應該是用來做CA證書的,但證書里面的該字段說明該證書不是用做CA證書的,就是這樣子的情況。
    27 X509_V_ERR_CERT_UNTRUSTED
    Root CA的證書如果用在請求的用途是不被信任的。
    28 X509_V_ERR_CERT_REJECTED
    CA的證書根本不可以用做請求的用途。
    29 X509_V_ERR_SUBJECT_ISSUER_MISMATCH
    證書頒發(fā)者名稱和其CA擁有者名稱不相同。-issuer_checks被set的時候可以檢驗出來。
    30 X509_V_ERR_AKID_SKID_MISMATCH
    證書的密鑰標志和其頒發(fā)CA為其指定的密鑰標志不同.
    31 X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH
    證書系列號與起頒發(fā)CA為其指定的系列號不同。
    32 X509_V_ERR_KEYUSAGE_NO_CERTSIGN
    某CA的證書用途不包括為其他證書簽名。
    50 X509_V_ERR_APPLICATION_VERIFICATION
    應用程序驗證出錯。

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
7 [報告]
發(fā)表于 2005-01-10 23:39 |只看該作者

openssl的man中文文檔(轉(zhuǎn))

openssl簡介-指令asn1parse

     用法:openssl asn1parse [-inform PEM|DER] [-in filename] [-out filename]
   
     [-noout] [-offset number] [-length number] [-i] [- structure filename]
   
     [-strparse offset]
   
用途:一個診斷工具,可以對ASN1結(jié)構(gòu)的東東進行分析。

    ASN1是什么?一個用來描述對象的標準。要解釋的話,文章可以比解釋openssl結(jié)構(gòu)的文章更長。有興趣的話自己去網(wǎng)絡(luò)上找來看吧。
   
-inform DER|PEM|TXT
    輸入的格式,DER是二進制格式,PEM是base64編碼格式,TXT不用解釋了吧
   
-in filename
    輸入文件的名稱,缺省為標準輸入。
   
    -out filename
    輸入文件的名稱,輸入一般都是DER數(shù)據(jù)。如果沒這個項,就沒有東西輸入咯。該項一般都要和-strparse一起使用。
   
    -noout
    不要輸出任何東西(不明白有什么用)
   
-offset number
    從文件的那里開始分析,看到offset就應該知道是什么意思了吧。
   
    -length number
    一共分析輸入文件的長度的多少,缺省是一直分析到文件結(jié)束。
   
    -i
    根據(jù)輸出的數(shù)據(jù)自動縮進。
   
    - structure filename
    當你輸入的文件包含有附加的對象標志符的時候,使用這個。
    這種文件的格式在后面會介紹。
   
    -strparse offset
    從由offset指定的偏移量開始分析ASN1對象。當你碰到一個嵌套的對象時,可以反復使用這個項來一直進到里面的結(jié)構(gòu)捏出你需要的東東。
    一般分析完之后輸入的東東如下:
    openssl asn1parse -out temp.ans -i -inform pem < server.crt
   
     0:d=0 hl=4 l= 881 cons: SEQUENCE
   
     4:d=1 hl=4 l= 730 cons: SEQUENCE
   
     ... ....
   
     172:d=3 hl=2 l= 13 prim: UTCTIME :000830074155Z
   
     187:d=3 hl=2 l= 13 prim: UTCTIME :010830074155Z
   
     202:d=2 hl=3 l= 136 cons: SEQUENCE
   
     205:d=3 hl=2 l= 11 cons: SET
   
     ... ...
   
     359:d=3 hl=3 l= 141 prim: BIT STRING
   
     ... ...
    本例是一個自簽名的證書。每一行的開始是對象在文件里的偏移量。d=xx是結(jié)構(gòu)嵌套的深度。知道ASN1結(jié)構(gòu)的人應該知道,每一個SET或者SEQUENCE都會讓嵌套深度增加1.
    hl=xx表示當前類型的header的長度。1=xx表示內(nèi)容的八進制的長度。
    -i可以讓輸出的東西容易懂一點。
    如果沒有ASN.1的知識,可以省略看這一章。
    本例中359行就是證書里的公共密鑰?梢杂-strparse來看看
    openssl asn1parse -out temp.ans -i -inform pem -strparse 359 < server.crt
   
     0:d=0 hl=3 l= 137 cons: SEQUENCE
   
     3:d=1 hl=3 l= 129 prim: INTEGER :C0D802B4C084B20569C619C0FDF
   
     466EEB7980920A408D51DA22C20427AC32488665D931C41E3274912DE2F25C8CA9C97B75
   
     415C01794B622DBEADD92DA068C140C3AD387BF5FDC9A8D2FCEE7F7F3E36B0194994FD67
   
     07897C8969F16F6ECB3F03BF985E910817160FE5DCBF874B1C0DBD06A568E130DA7C9FE3
   
     9FE7A7F421369
   
     135:d=1 hl=2 l= 3 prim: INTEGER :010001
    不要試圖去看temp.ans的內(nèi)容,是二進制來的,看不懂的。

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
8 [報告]
發(fā)表于 2005-01-10 23:41 |只看該作者

openssl的man中文文檔(轉(zhuǎn))

openssl簡介-指令ca

用途:
    模擬CA行為的工具.有了它,你就是一個CA,不過估計是nobody trusted CA.可以用來給各種格式的CSR簽名,用來產(chǎn)生和維護CRL(不記得CRL是什么了?去看證書那一章).他還維護著一個文本數(shù)據(jù)庫,記錄了所有經(jīng)手頒發(fā)的證書及那些證書的狀態(tài)。
    用法:
     openssl ca [-verbose] [-config filename] [-name section] [-gencrl]
   
     [-revoke file] [-crldays days] [-crlhours hours] [-crlexts section]
   
     [-startdate date] [-enddate date] [-days arg] [-md arg] [-policy arg]
   
     [-keyfile arg] [-key arg] [-passin arg] [-cert file] [-in file]
   
     [-out file] [-notext] [-outdir dir] [-infiles] [-spkac file]
   
     [-ss_cert file] [-preserveDN] [-batch] [-msie_hack] [-extensions section]

     哇噻,好復雜也。不過用過GCC的人應該覺得這么點flag還是小case.
   
-config filename
    指定使用的configure文件。
   
    -in filename
    要簽名的CSR文件。
   
    -ss_cert filename
    一個有自簽名的證書,需要我們CA簽名,就從這里輸入文件名。
   
    -spkac filename
    這一段實在沒有看懂,也沒興趣,估計和SPKAC打交道可能性不大,奉送上英文原文。
    a file containing a single Netscape signed public key and challenge and additional field values to be signed by the CA.
SPKAC FORMAT
    The input to the -spkac command line option is a Netscape signed public key and challenge. This will usually come from the KEYGEN tag in an HTML form to create a new private key. It is however possible to create SPKACs using the spkac utility.
    The file should contain the variable SPKAC set to the value of the SPKAC and also the required DN components as name value pairs. If you need to include the same component twice then it can be preceded by a number and a .
    -infiles
    如果你一次要給幾個CSR簽名,就用這個來輸入,但記得這個選項一定要放在最后。這個項后面的所有東東都被認為是CSR文件名參數(shù)。
    -out filename
    簽名后的證書文件名。證書的細節(jié)也會給寫進去。
    -outdir directory
    擺證書文件的目錄。證書名就是該證書的系列號,后綴是.pem
    -cert
    CA本身的證書文件名
    -keyfile filename
    CA自己的私有密鑰文件
    -key password
    CA的私有密鑰文件的保護密碼。
    在有的系統(tǒng)上,可以用ps看到你輸入的指令,所以這個參數(shù)要小心點用。
    -passin arg
    也是一個輸入私有密鑰保護文件的保護密碼的一種方式,可以是文件名,設(shè)備名或者是有名管道。程序會把該文件的第一行作為密碼讀入。(也蠻危險的)。
    -verbose
    操作過程被詳細printf出來
    -notext
    不要把證書文件的明文內(nèi)容輸出到文件中去。
    -startdate date
    指明證書的有效開始日期。格式是YYMMDDHHMMSSZ, 同ASN1的UTCTime結(jié)構(gòu)相同。
    -enddate date
    指明證書的有效截止日期,格式同上。
    -days arg
    指明給證書的有效時間,比如365天。
    -md alg
    簽名用的哈希算法,比如MD2, MD5等。
    -policy arg
    指定CA使用的策略。其實很簡單,就是決定在你填寫信息生成CSR的時候,哪些信息是我們必須的,哪些不是?纯碿onfig文件里面的policy這個item就明白了。
    -msie_hack
    為了和及其古老的證書版本兼容而做出的犧牲品,估計沒人會用的,不解釋了。
    -preserveDN
    和-msie_hack差不多的一個選項。
    -batch
    設(shè)置為批處理的模式,所有的CSR會被自動處理。
    -extensions section
    我們知道一般我們都用X509格式的證書,X509也有幾個版本的。如果你在這個選項后面帶的那個參數(shù)在config文件里有同樣名稱的key,那么就頒發(fā)X509V3證書,否則頒發(fā)X509v1證書。
    還有幾個關(guān)于CRL的選項,但我想一般很少人會去用。我自己也沒興趣去研究。
    有興趣的自己看看英文吧。
        
     CRL OPTIONS
   
     -gencrl
   
     this option generates a CRL based on information in the index file.
      -crldays num
   
     the number of days before the next CRL is due. That is the days from
   
     now to place in the CRL nextUpdate field.
   
-crlhours num
   
     the number of hours before the next CRL is due.
        
     -revoke filename
   
     a filename containing a certificate to revoke.
        
     -crlexts section
   
     the section of the configuration file containing CRL extensions to
   
     include. If no CRL extension section is present then a V1 CRL is created,
   
     if the CRL extension section is present (even if it is empty) then a V2
   
     CRL is created. The CRL extensions specified are CRL extensions and not
   
     CRL entry extensions. It should be noted that some software (for example
   
     Netscape) can't handle V2 CRLs.
   
    相信剛才大家都看到很多選項都和config文件有關(guān),那么我們來解釋一下config文件make install之后,openssl會生成一個全是缺省值的config文件penssl.cnf.也長的很,貼出來有賺篇幅之嫌,xgh不屑。簡單解釋一下其中與CA有關(guān)的key.
與CA有關(guān)的key都在ca這個section之中。
    [ ca ]
    default_ca = CA_default
    [ CA_default ]
    dir = ./demoCA # Where everything is kept
    certs = $dir/certs # Where the issued certs are kept
    crl_dir = $dir/crl # Where the issued crl are kept
    database = $dir/index.txt # database index file.
    new_certs_dir = $dir/newcerts # default place for new certs.
    certificate = $dir/cacert.pem # The CA certificate
    serial = $dir/serial # The current serial number
    crl = $dir/crl.pem # The current CRL
    private_key = $dir/private/cakey.pem# The private key
    RANDFILE = $dir/private/.rand # private random number file
    x509_extensions = usr_cert # The extentions to add to the cert
    # Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
    # so this is commented out by default to leave a V1 CRL.
    # crl_extensions = crl_ext
    default_days = 365 # how long to certify for
    default_crl_days= 30 # how long before next CRL
    default_md = md5 # which md to use.
    preserve = no # keep passed DN ordering
    # A few difference way of specifying how similar the request should look
    # For type CA, the listed attributes must be the same, and the optional
    # and supplied fields are just that
    policy = policy_match
    # For the CA policy
    [ policy_match ]
    countryName = match
    stateOrProvinceName = match
    organizationName = match
    organizationalUnitName = optional
    commonName = supplied
    emailAddress = optional
    # At this point in time, you must list all acceptable 'object'
    # types.
    [ policy_anything ]
    countryName = optional
    stateOrProvinceName = optional
    localityName = optional
    organizationName = optional
    organizationalUnitName = optional
    commonName = supplied
    emailAddress = optional
    config文件里CA section里面的很多key都和命令行參數(shù)是對應的。
    如果某個key后面標明mandatory,那就說明這個參數(shù)是必須提供的,無論你通過命令行還是通過config文件去提供。

new_certs_dir
    本key同命令行的 -outdir意義相同。(mandatory)
    certificate
    同命令行的 -cert意義相同。(mandatory)
    private_key
    同命令行-keyfile意義相同.(mandatory)
    RANDFILE
    指明一個用來讀寫時候產(chǎn)生random key的seed文件。具體意義在以后的RAND的API再給出解釋。(不是我擺譜,我覺得重復解釋沒有必要)
    default_days
    意義和命令行的 -days相同。
    default_startdate
    意義同命令行的 -startdate相同。如果沒有的話那么就使用產(chǎn)生證書的時間。
    default_enddate
    意義同命令行的 -enddate相同。(mandatory).
    crl_extensions
    preserve
    default_crl_hours default_crl_days
    CRL的東西.....自己都沒弄懂.....
    default_md
    同命令行的-md意義相同. (mandatory)
    database
    記得index.txt是什么文件嗎?不記得自己往前找。這個key就是指定index.txt的。初始化是空文件。
    serialfile
    指明一個txt文件,里面必須包含下一個可用的16進制數(shù)字,用來給下一個證書做系列號。(mandatory)
    x509_extensions
    意義同 -extensions相同。
    msie_hack
    意義同-msie_hack相同。
    policy
    意義同-policy相同。自己看看這一塊是怎么回事。(mandatory)
    [ policy_match ]
    countryName = match
    stateOrProvinceName = match
    organizationName = match
    organizationalUnitName = optional
    commonName = supplied
    emailAddress = optional
    其實如果你做過CSR就會明白,這些項就是你做CSR時候填寫的那些東西麻。
    后面的"match", "supplied"等又是什么意思呢?"match"表示說明你填寫的這一欄一定要和CA本身的證書里面的這一欄相同。supplied表示本欄必須,optional就表示本欄可以不填寫。
    舉例時間到了:
    注意,本例中我們先要在 $OPENSSL/misc下面運行過CA.sh -newca,建立好相應的目錄,所有需要的文件,包括CA的私有密鑰文件,證書文件,系列號文件,和一個空的index文件。并且文件都已經(jīng)各就各位。放心把,產(chǎn)生文件和文件就位都由CA.sh搞定,你要做的就是運行CA.sh -nweca就行了,甚至在你的系列號文件中還有個01,用來給下一個證書做系列號。
    給一個CSR簽名:
    openssl ca -in req.pem -out newcert.pem
    給一個CSR簽名, 產(chǎn)生x509v3證書:
    openssl ca -in req.pem -extensions v3_ca -out newcert.pem
    同時給數(shù)個CSR簽名:
    openssl ca -infiles req1.pem req2.pem req3.pem
    注意:
    index.txt文件是整個處理過程中很重要的一部分,如果這玩意壞了,很難修復。理論上根據(jù)已經(jīng)頒發(fā)的證書和當前的CRL當然是有辦法修復的啦,但openssl沒提供這個功能。
    openssl還有倆大類指令: crl, crl2pkcs7, 都是和CRL有關(guān)的,
    由于我們對這個沒有興趣,所以這倆大類不做翻譯和解釋。

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
9 [報告]
發(fā)表于 2005-01-10 23:42 |只看該作者

openssl的man中文文檔(轉(zhuǎn))

openssl簡介-指令cipher
說明:cipher就是加密算法的意思。ssl的cipher主要是對稱加密算法和不對稱加密算法的組合。 本指令是用來展示用于SSL加密算法的工具。它能夠把所有openssl支持的加密算法按照一定規(guī)律排列(一般是加密強度)。這樣可以用來做測試工具,決定使用什么加密算法。
   
   
    用法:
    openssl ciphers [-v] [-ssl2] [-ssl3] [-tls1] [cipherlist]
        
    COMMAND OPTIONS
    -v
    詳細列出所有符合的cipher的所有細節(jié)。列出該cipher使用的ssl的版本,公共密鑰交換算法,身份驗證方法,對稱加密算法以及哈希算法。還列出該算法是否可以出口。

    算法出口? 趁這個機會可以給大家來點革命教育。米國的加密算法研究是世界上最先進的,其國家安全局(NSA)在這方面的研究水平已經(jīng)多次證明比"最先進水平"領(lǐng)先10到15年。他們的預算據(jù)說是每年200億美圓。他們的數(shù)學家比你知道的還多,他們還是全世界最大的計算機硬件買家。DES就是他們最先弄出來的。到了70年代,IBM也有人在實現(xiàn)室弄出這個算法。都弄出來30年了,還使用的這么廣泛。
    該算法的最隱蔽的是一個叫S匣的東西,是一個常數(shù)矩陣。研究DES你就會知道這玩意。因為NSA和IBM都沒有給出這個S匣的解釋,所以大家都懷疑使用這個東西是否是NSA和IBM搞出來的后門?
    一直到了90年代,才有倆個以色列人發(fā)現(xiàn)了原因,這個是為了對付一種叫什么微分密碼分析的破解法而如此設(shè)置的,對S匣的任何改動都將使微分密碼分析比較容易的將DES給K掉。S匣不僅不是后門,還是最大限度的增加了加密強度。
    說遠了,大意就是:老米在這方面領(lǐng)先的可怕。但他們怕他們的研究成果給其他國家的人用,搞的自己也破解不了,那就麻煩了。所以他們用法律規(guī)定了,一定強度以上的加密算法禁止給其他國家用。那些加密強度很弱的就可以出口。
    這個故事教育我們,為了中國的崛起,還有很多路要走吶。
   如果沒有-v這個參數(shù), 很多cipher可能重復出現(xiàn),因為他們可以同時被不同版本的SSL協(xié)議使用。
   
     -ssl3
    只列出SSLv3使用的ciphers
     -ssl2
    只列出SSLv2使用的ciphers
    -tls1
    只列出TLSv1使用的ciphers
    -h, -?
    打印幫助信息
    cipherlist
   列出一個cipher list的詳細內(nèi)容。一般都這么用:
   openssl -v XXXXX
   這個XXXXX就是cipher list.如果是空的話,那么XXXXX代表所有的cipher.
   CIPHER LIST 的格式
   cipher list由許多cipher string組成,由冒號,逗號或者空格分隔開。但一般最常用的是用冒號。
   cipher string又是什么?
   它可以僅僅包含一個cipher, 比如RC4-SHA.
   它也可以僅僅包含一個加密算法,比如SHA, 那就表示所有用到SHA的cipher都得列出來。
    你還可以使用三個符號來捏合各種不同的cipher,做出cipher string.這三個符號是 +, -, !。我想這個很好理解吧,MD5+DES表示同時使用了這倆種算法的cipher,!SHA就表示所有沒有有用到SHA的cipher, IDEA-CBC就表示使用了IDEA而沒有使用CBC的所有cipher.
    openssl還缺省的定義了一些通用的cipher string, 有:
    DEFAULT: 缺省的cipher list.
    ALL: 所有的cipher
    HIGH, LOW, MEDIUM: 分別代表 高強度,中等強度和底強度的cipher list.具體一點就是對稱加密算法的key的長度分別是 >;128bit <128bit和 ==128bit的cipher.
    EXP, EXPORT, EXPORT40: 老米的壟斷體現(xiàn),前倆者代表法律允許出口的加密算法,包括40bit, 56bit長度的key的算法,后者表示只有40bit長度的key的加密算法。
    eNULL, NULL: 表示不加密的算法。(那也叫加密算法嗎?)
    aNULL: 不提供身份驗證的加密算法。目前只有DH一種。該算法很容易被監(jiān)聽者,路由器等中間設(shè)備攻擊,所以不提倡使用。
   
    下表列出了SSL/TLS使用的cipher, 以及openssl里面如何表示這些cipher.
    SSL v3.0 cipher suites OPENLLS表示方法
   
     SSL_RSA_WITH_NULL_MD5 NULL-MD5
   
     SSL_RSA_WITH_NULL_SHA NULL-SHA
   
     SSL_RSA_EXPORT_WITH_RC4_40_MD5 EXP-RC4-MD5
   
     SSL_RSA_WITH_RC4_128_MD5 RC4-MD5
   
     SSL_RSA_WITH_RC4_128_SHA RC4-SHA
   
     SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5 EXP-RC2-CBC-MD5
   
     SSL_RSA_WITH_IDEA_CBC_SHA IDEA-CBC-SHA
   
     SSL_RSA_EXPORT_WITH_DES40_CBC_SHA EXP-DES-CBC-SHA
   
     SSL_RSA_WITH_DES_CBC_SHA DES-CBC-SHA
   
     SSL_RSA_WITH_3DES_EDE_CBC_SHA DES-CBC3-SHA
        
     SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA Not implemented.
   
     SSL_DH_DSS_WITH_DES_CBC_SHA Not implemented.
   
     SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA Not implemented.
   
     SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA Not implemented.
   
     SSL_DH_RSA_WITH_DES_CBC_SHA Not implemented.
   
     SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA Not implemented.
   
     SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA EXP-EDH-DSS-DES-CBC-SHA
   
     SSL_DHE_DSS_WITH_DES_CBC_SHA EDH-DSS-CBC-SHA
   
     SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA EDH-DSS-DES-CBC3-SHA
   
     SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA EXP-EDH-RSA-DES-CBC-SHA
   
     SSL_DHE_RSA_WITH_DES_CBC_SHA EDH-RSA-DES-CBC-SHA
   
     SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA EDH-RSA-DES-CBC3-SHA
   
     
     SSL_DH_anon_EXPORT_WITH_RC4_40_MD5 EXP-ADH-RC4-MD5
   
     SSL_DH_anon_WITH_RC4_128_MD5 ADH-RC4-MD5
   
     SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA EXP-ADH-DES-CBC-SHA
   
     SSL_DH_anon_WITH_DES_CBC_SHA ADH-DES-CBC-SHA
   
     SSL_DH_anon_WITH_3DES_EDE_CBC_SHA ADH-DES-CBC3-SHA
   
     
   
     SSL_FORTEZZA_KEA_WITH_NULL_SHA Not implemented.
   
     SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA Not implemented.
   
     SSL_FORTEZZA_KEA_WITH_RC4_128_SHA Not implemented.
   
     
   
     TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA EXP1024-DES-CBC-SHA
   
     TLS_RSA_EXPORT1024_WITH_RC4_56_SHA EXP1024-RC4-SHA
   
     TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA EXP1024-DHE-DSS-DES-CBC-SHA
   
     TLS_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA EXP1024-DHE-DSS-RC4-SHA
   
     TLS_DHE_DSS_WITH_RC4_128_SHA DHE-DSS-RC4-SHA
   
     
   
     
   
    TLS v1.0 cipher suites.
   
     TLS_RSA_WITH_NULL_MD5 NULL-MD5
   
     TLS_RSA_WITH_NULL_SHA NULL-SHA
   
     TLS_RSA_EXPORT_WITH_RC4_40_MD5 EXP-RC4-MD5
   
     TLS_RSA_WITH_RC4_128_MD5 RC4-MD5
   
     TLS_RSA_WITH_RC4_128_SHA RC4-SHA
   
     TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 EXP-RC2-CBC-MD5
   
     TLS_RSA_WITH_IDEA_CBC_SHA IDEA-CBC-SHA
   
     TLS_RSA_EXPORT_WITH_DES40_CBC_SHA EXP-DES-CBC-SHA
   
     TLS_RSA_WITH_DES_CBC_SHA DES-CBC-SHA
   
     TLS_RSA_WITH_3DES_EDE_CBC_SHA DES-CBC3-SHA
   
     
   
     TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA Not implemented.
   
     TLS_DH_DSS_WITH_DES_CBC_SHA Not implemented.
   
     TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA Not implemented.
   
     TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA Not implemented.
   
     TLS_DH_RSA_WITH_DES_CBC_SHA Not implemented.
   
     TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA Not implemented.
   
     TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA EXP-EDH-DSS-DES-CBC-SHA
   
     TLS_DHE_DSS_WITH_DES_CBC_SHA EDH-DSS-CBC-SHA
   
     TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA EDH-DSS-DES-CBC3-SHA
   
     TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA EXP-EDH-RSA-DES-CBC-SHA
   
     TLS_DHE_RSA_WITH_DES_CBC_SHA EDH-RSA-DES-CBC-SHA
   
     TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA EDH-RSA-DES-CBC3-SHA
   
     
   
     TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 EXP-ADH-RC4-MD5
   
     TLS_DH_anon_WITH_RC4_128_MD5 ADH-RC4-MD5
   
     TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA EXP-ADH-DES-CBC-SHA
   
     TLS_DH_anon_WITH_DES_CBC_SHA ADH-DES-CBC-SHA
   
     TLS_DH_anon_WITH_3DES_EDE_CBC_SHA ADH-DES-CBC3-SHA
   
    NOTES
    DH算法由于老米沒有允許人家使用,所有openssl都沒有實現(xiàn)之。
    舉例時間:
    詳細列出所有openssl支持的ciphers,包括那些eNULL ciphers:
    openssl ciphers -v 'ALL:eNULL'
    按加密強度列出所有加密算法:
    openssl ciphers -v 'ALL:!ADHSTRENGTH'
    詳細列出所有同時使用了3DES和RSA的ciphers
    openssl ciphers -v '3DES:+RSA'

論壇徽章:
1
榮譽版主
日期:2011-11-23 16:44:17
10 [報告]
發(fā)表于 2005-01-10 23:43 |只看該作者

openssl的man中文文檔(轉(zhuǎn))

openssl簡介-指令dgst
用法:
   
    openssl dgst [md5|md2|sha1|sha|mdc2|ripemd160] [-c] [-d] [file...]
   
    說明:這個指令可以用來哈希某個文件內(nèi)容的,
以前的版本還可以用來做數(shù)字簽名和認證。這個工具本來有很多選項的,可是不知道為什么,現(xiàn)在版本的openssl刪掉了很多。表示你用什么算法來哈希該文件內(nèi)容
   
OPTIONS
    -md5 -sha那些就不用結(jié)實了吧,都是一些哈希算法的名稱
    -c
    打印出哈希結(jié)果的時候用冒號來分隔開。
    -d
    詳細打印出調(diào)試信息
    file...
    你要哈希的文件,如果沒有指定,就使用標準輸入。
    舉例時間:
    要哈希一個叫fordesign.txt文件的內(nèi)容,使用SHA算法
    openssl dgst -sha -c fordesign.txt
    SHA(fordesign.txt)=
    57:37:dc:a5:8c:bd:12:aa:43:45:fe:2a:19:f5:05:a3:be:e9:08:cc
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP