零全零美(www.zzgwt.com)
          生活中的很多事情,并不像If...Else那么簡單!
          posts - 96,comments - 52,trackbacks - 0
          openssl簡介-指令s_client
            
              用法:
             
              openssl s_client [-connect host:port>;] [-verify depth] [-cert filename]
             
              [-key filename] [-CApath directory] [-CAfile filename] [-reconnect]
             
              [-pause] [-showcerts] [-debug] [-nbio_test] [-state] [-nbio] [-crlf]
             
              [-ign_eof] [-quiet] [-ssl2] [-ssl3] [-tls1] [-no_ssl2] [-no_ssl3]
             
              [-no_tls1] [-bugs] [-cipher cipherlist]
             
              描述:
              用于模擬一個普通的SSL/TLS client, 對于調(diào)試和診斷SSL server很有用。

             
              OPTIONS
              -connect host:port
              這個不用解釋了吧, 連接的ip:port.
              -cert certname
              使用的證書文件。如果server不要求要證書,這個可以省略。
              -key keyfile
              使用的私有密鑰文件
              -verify depth
              指定驗證深度。記得CA也是分層次的吧?如果對方的證書的簽名CA不是Root CA,那么你可以再去驗證給該CA的證書簽名的CA, 一直到Root CA. 目前的驗證操作即使這條CA鏈上的某一個證書驗證有問題也不會影響對更深層的CA的身份的驗證。所以整個CA鏈上的問題都可以檢查出來。當(dāng)然CA的驗證出問題并不會直接造成連接馬上斷開,好的應(yīng)用程序可以讓你根據(jù)驗證結(jié)果決定下一步怎么走。
              -CApath directory
              一個目錄。里面全是CA的驗證資料,該目錄必須是"哈希結(jié)構(gòu)". verify指令里會詳細(xì)說明。在建立client的證書鏈的時候也有用到這個指令。
              -CAfile file
              某文件,里面是所有你信任的CA的證書的內(nèi)容。當(dāng)你要建立client的證書鏈的時候也需要用到這個文件。
              -reconnect
              使用同樣的session-id連接同一個server五次,用來測試server的session緩沖功能是否有問題。
              -pause
              每次讀寫操作后都挺頓一秒。
              -showcerts
              顯示整條server的證書的CA的證書鏈。否則只顯示server的證書。
              -prexit
              當(dāng)程序退出的時候打印session的信息。即使連接失敗,也會打印出調(diào)試信息。一般如果連接成功的話,調(diào)試信息將只被打出來一次。本option比較有用,因為在一次SSL連接中,cipher也可能改變,或者連接可能失敗。要注意的是:有時候打印出來的東西并不一定準(zhǔn)確。(這樣也行??eric, 言重了.)
              -state
              打印SSL session的狀態(tài), ssl也是一個協(xié)議,當(dāng)然有狀態(tài)。
              -debug
              打印所有的調(diào)試信息。
              -nbio_test
              檢查非阻塞socket的I/O運行情況。
              -nbio
              使用非阻塞socket
              -crlf
              回把你在終端輸入的換行回車轉(zhuǎn)化成/r/n送出去。
              -ign_eof
             當(dāng)輸入文件到達(dá)文件尾的時候并不斷開連接。
             -quiet
             不打印出session和證書的信息。同時會打開-ign_eof這個option.
             -ssl2, -ssl3, -tls1, -no_ssl2, -no_ssl3, -no_tls1
             選擇用什么版本的協(xié)議。很容易理解,不用多解釋了吧。
             注意,有些很古老的server就是不能處理TLS1, 所以這個時候要關(guān)掉TLS1.n.
             -bugs
             SSL/TLS有幾處眾所周知的bug, set了這個option使出錯的可能性縮小。
             -cipher cipherlist
             由我們自己來決定選用什么cipher,盡管是由server來決定使用什么cipher,但它一般都會采用我們送過去的cipher列表里的第一個cipher.
              有哪些cipher可用?指令cipher對這個解釋的更清楚。
              一旦和某個SSL server建立連接之后,所有從server得到的數(shù)據(jù)都會被打印出來,所有你在終端上輸入的東西也會被送給server. 這是人機交互式的。這時候不能set -quiet和 -ign_eof這倆個option。如果輸入的某行開頭字母是R,那么在這里session會renegociate, 如果輸入的某行開頭是Q, 那么連接會被斷開。你完成整個輸入之后連接也會被斷開。
              If a connection is established with an SSL server then any data received from the server is displayed and any key presses will be sent to the server. When used interactively (which means neither -quiet nor -ign_eof have been given), the session will be renegociated if the line begins with an R, and if the line begins with a Q or if end of file is reached, the connection will be closed down.
              本指令主要是來debug一個SSL server的。如果想連接某個SSL HTTP server,輸入下一條指令:
             openssl s_client -connect servername:443
             如果連接成功,你可以用HTTP的指令,比如"GET /"什么的去獲得網(wǎng)頁了。
              如果握手失敗,原因可能有以下幾種:
              1. server需要驗證你的證書,但你沒有證書
              2.如果肯定不是原因1, 那么就慢慢一個一個set以下幾個option
              -bugs, -ssl2, -ssl3, -tls1, -no_ssl2, -no_ssl3, -no_tls1
              這可能是因為對方的server處理SSL有bug.
              有的時候,client會報錯:沒有證書可以使用,或者供選擇的證書列表是空的。這一般是因為Server沒有把給你簽名的CA的名字列進它自己認(rèn)為可以信任的CA列表,你可以用檢查一下server的信任CA列表。有的http server只在 client給出了一個URL之后才驗證client的證書,這中情況下要set -prexit這個option, 并且送給server一個頁面請求。
              即使使用-cert指明使用的證書,如果server不要求驗證client的證書,那么該證書也不會被驗證。所以不要以為在命令行里加了-cert 的參數(shù)又連接成功就代表你的證書沒有問題。
              如果驗證server的證書沒有問題,就可以set -showcerts來看看server的證書的CA鏈了。
              其實這個工具并不好用, 自己寫一個client的會方便很多。
              舉例時間:
              注意,中間的pop3協(xié)議的指令是我通過終端輸入的。其他都是程序輸出的對話
              過程。具體的每行意義不用解釋了。


          openssl s_client -key server.key -verify 1 -showcerts -prexit -state \
              -crlf -connect 127.0.0.1:5995
              verify depth is 1
              CONNECTED(00000003)
              SSL_connect:before/connect initialization
              SSL_connect:SSLv2/v3 write client hello A
              SSL_connect:SSLv3 read server hello A
              depth=0 /C=AU/ST=Some-State/L=gz/O=ai ltd/OU=sw/CN=fordesign/
              Email=xxx@xxx.xom
              verify error:num=20:unable to get local issuer certificate
              verify return:1
              depth=0 /C=AU/ST=Some-State/L=gz/O=ai ltd/OU=sw/CN=fordesign/
              Email=xxx@xxx.xom
              verify error:num=27:certificate not trusted
              verify return:1
              depth=0 /C=AU/ST=Some-State/L=gz/O=ai ltd/OU=sw/CN=fordesign/
              Email=xxx@xxx.xom
              verify error:num=21:unable to verify the first certificate
              verify return:1
              SSL_connect:SSLv3 read server certificate A
              SSL_connect:SSLv3 read server done A
              SSL_connect:SSLv3 write client key exchange A
              SSL_connect:SSLv3 write change cipher spec A
              SSL_connect:SSLv3 write finished A
              SSL_connect:SSLv3 flush data
              SSL_connect:SSLv3 read finished A
              Certificate chain
              0 s:/C=AU/ST=Some-State/L=gz/O=ai ltd/OU=sw/CN=fordesign/Email=xxx@xxx.xom
              i:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=fordesign/
              Email=fordeisgn@21cn.com
              ----BEGIN CERTIFICATE-----
              MIIDdzCCAuCgAwIBAgIBATANBgkqhkiG9w0BAQQFADB8MQswCQYDVQQGEwJBVTET
              MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ
              dHkgTHRkMRIwEAYDVQQDEwlmb3JkZXNpZ24xITAfBgkqhkiG9w0BCQEWEmZvcmRl
              aXNnbkAyMWNuLmNvbTAeFw0wMDExMTIwNjE5MDNaFw0wMTExMTIwNjE5MDNaMH0x
              CzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMQswCQYDVQQHEwJnejEP
              MA0GA1UEChMGYWkgbHRkMQswCQYDVQQLEwJzdzESMBAGA1UEAxMJZm9yZGVzaWdu
              MRowGAYJKoZIhvcNAQkBFgt4eHhAeHh4LnhvbTCBnzANBgkqhkiG9w0BAQEFAAOB
              jQAwgYkCgYEAuQVRVaCyF+a8/927cA9CjlrSEGOL17+Fk1U6rqZ8fJ6UR+kvhUUk
              fgyMmzrw4bhnZlk2NV5afZEhiiNdRri9f8loklGRXRkDfmhyUWtjiFWUDtzkuQoT
              6jhWfoqGNCKh/92cjq2wicJpp40wZGlfwTwSnmjN9/eNVwEoXigSy5ECAwEAAaOC
              AQYwggECMAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJh
              dGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBS+WovE66PrvCAtojYMV5pEUYZtjzCB
              pwYDVR0jBIGfMIGcgBRpQYdVvVKZ0PXsEX8KAVNYTgt896GBgKR+MHwxCzAJBgNV
              BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
              aWRnaXRzIFB0eSBMdGQxEjAQBgNVBAMTCWZvcmRlc2lnbjEhMB8GCSqGSIb3DQEJ
              ARYSZm9yZGVpc2duQDIxY24uY29tggEAMA0GCSqGSIb3DQEBBAUAA4GBADDOp/O/
              o3mBZV4vc3mm2C6CcnB7rRSYEoGm6T6OZsi8mxyF5w1NOK5oI5fJU8xcf8aYFVoi
              0i4LlsiQw+EwpnjUXfUBxp/g4Cazlv57mSS6h1t4a/BPOIwzcZGpo/R3g/fOPwsF
              F/2RC++81s6k78iezFrTs9vnsm/G4vRjngLI
              -----END CERTIFICATE-----
              ---
              Server certificate
              subject=/C=AU/ST=Some-State/L=gz/O=ai ltd/OU=sw/CN=fordesign/
              Email=xxx@xxx.xom
              issuer=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=fordesign/
              Email=fordeisgn@21cn.com
              ---
              No client certificate CA names sent
              ---
              SSL handshake has read 1069 bytes and written 342 bytes
              ---
              New, TLSv1/SSLv3, Cipher is DES-CBC3-SHA
              Server public key is 1024 bit
              SSL-Session:
              Protocol : SSLv3
              Cipher : DES-CBC3-SHA
              Session-ID: E1EC3B051F5DB8E2E3D3CD10E4C0412501DDD6641ACA932B65
              DC25DCD0A3A86E
              Session-ID-ctx:
              Master-Key: 47DB3A86375DB2E99982AFD8F5B382B4316385694B01B74BFC3
              FA26C7DBD489CABE0EE1B20CE8E95E4ABF930099084B0
              Key-Arg : None
              Start Time: 974010506
              Timeout : 300 (sec)
              Verify return code: 0 (ok)
              ---
              +OK AIMC POP service (sol7.gzai.com) is ready.
              user ssltest0
              +OK Please enter password for user <ssltest0>;.
              pass ssltest0
              +OK ssltest0 has 12 message (282948 octets)
              list
              +OK 12 messages (282948 octets)
              1 21230
              2 21230
              3 21230
              4 21230
              5 21229
              6 21230
              7 21230
              8 21230
              9 111511
              10 136
              11 141
              12 1321
               .
              quit
              +OK Pop server at (sol7.gzai.com) signing off.
              read:errno=0
              SSL3 alert write:warning:close notify
              ---
              Certificate chain
              0 s:/C=AU/ST=Some-State/L=gz/O=ai ltd/OU=sw/CN=fordesign/
              Email=xxx@xxx.xom
              i:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=fordesign/
              Email=fordeisgn@21cn.com
              -----BEGIN CERTIFICATE-----
              MIIDdzCCAuCgAwIBAgIBATANBgkqhkiG9w0BAQQFADB8MQswCQYDVQQGEwJBVTET
              MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ
              dHkgTHRkMRIwEAYDVQQDEwlmb3JkZXNpZ24xITAfBgkqhkiG9w0BCQEWEmZvcmRl
              aXNnbkAyMWNuLmNvbTAeFw0wMDExMTIwNjE5MDNaFw0wMTExMTIwNjE5MDNaMH0x
              CzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMQswCQYDVQQHEwJnejEP
              MA0GA1UEChMGYWkgbHRkMQswCQYDVQQLEwJzdzESMBAGA1UEAxMJZm9yZGVzaWdu
              MRowGAYJKoZIhvcNAQkBFgt4eHhAeHh4LnhvbTCBnzANBgkqhkiG9w0BAQEFAAOB
              jQAwgYkCgYEAuQVRVaCyF+a8/927cA9CjlrSEGOL17+Fk1U6rqZ8fJ6UR+kvhUUk
              fgyMmzrw4bhnZlk2NV5afZEhiiNdRri9f8loklGRXRkDfmhyUWtjiFWUDtzkuQoT
              6jhWfoqGNCKh/92cjq2wicJpp40wZGlfwTwSnmjN9/eNVwEoXigSy5ECAwEAAaOC
              AQYwggECMAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJh
              dGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBS+WovE66PrvCAtojYMV5pEUYZtjzCB
              pwYDVR0jBIGfMIGcgBRpQYdVvVKZ0PXsEX8KAVNYTgt896GBgKR+MHwxCzAJBgNV
              BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
              aWRnaXRzIFB0eSBMdGQxEjAQBgNVBAMTCWZvcmRlc2lnbjEhMB8GCSqGSIb3DQEJ
              ARYSZm9yZGVpc2duQDIxY24uY29tggEAMA0GCSqGSIb3DQEBBAUAA4GBADDOp/O/
              o3mBZV4vc3mm2C6CcnB7rRSYEoGm6T6OZsi8mxyF5w1NOK5oI5fJU8xcf8aYFVoi
              0i4LlsiQw+EwpnjUXfUBxp/g4Cazlv57mSS6h1t4a/BPOIwzcZGpo/R3g/fOPwsF
              F/2RC++81s6k78iezFrTs9vnsm/G4vRjngLI
              -----END CERTIFICATE-----
              ---
              Server certificate
              subject=/C=AU/ST=Some-State/L=gz/O=ai ltd/OU=sw/CN=fordesign/
              Email=xxx@xxx.xom
              issuer=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=fordesign/
              Email=fordeisgn@21cn.com
              ---
              No client certificate CA names sent
              ---
              SSL handshake has read 1579 bytes and written 535 bytes
              ---
              New, TLSv1/SSLv3, Cipher is DES-CBC3-SHA
              Server public key is 1024 bit
              SSL-Session:
              Protocol : SSLv3
              Cipher : DES-CBC3-SHA
              Session-ID: E1EC3B051F5DB8E2E3D3CD10E4C0412501DDD6641ACA932B65DC2
              5DCD0A3A86E
              Session-ID-ctx:
              Master-Key: 47DB3A86375DB2E99982AFD8F5B382B4316385694B01B74BFC3FA
              26C7DBD489CABE0EE1B20CE8E95E4ABF930099084B0
              Key-Arg : None
              Start Time: 974010506
              Timeout : 300 (sec)
              Verify return code: 0 (ok)
          posted on 2009-11-27 17:43 零全零美 閱讀(4764) 評論(0)  編輯  收藏 所屬分類: 安全相關(guān)
          主站蜘蛛池模板: 章丘市| 渭南市| 大庆市| 二连浩特市| 高邑县| 页游| 广水市| 锦屏县| 太仆寺旗| 筠连县| 乌拉特后旗| 子长县| 陇川县| 永兴县| 长寿区| 贵港市| 原阳县| 临海市| 玛多县| 铜梁县| 闻喜县| 松溪县| 黄陵县| 柳林县| 滁州市| 定西市| 芜湖市| 遂平县| 涞源县| 邢台县| 周口市| 秭归县| 余干县| 蕉岭县| 梅州市| 桦川县| 苏州市| 武强县| 吉木萨尔县| 安宁市| 南乐县|