openssl簡介(二十一)--指令s_client
二十一.????
指令
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,
對于調試和診斷
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
鏈上的問題都可以檢查出來。當然
CA
的驗證出
問題并不會直接造成連接馬上斷開,好的應用程序可以讓你根據驗證結果決定下一步怎么走。
? ? -CApath directory
? ?
一個目錄。里面全是
CA
的驗證資料,該目錄必須是
"
哈希結構
". verify
指令里會詳細說明。在建立
client
的證書鏈的時候也有用到這個指令。
? ? -CAfile file
? ?
某文件,里面是所有你信任的
CA
的證書的內容。當你要建立
client
的證書鏈的時候也需要用到這個文件。
? ? -reconnect
? ?
使用同樣的
session-id
連接同一個
server
五次,用來測試
server
的
session
緩沖功能是否有問題。
? ? -pause
? ?
每次讀寫操作后都挺頓一秒。
? ? -showcerts
? ?
顯示整條
server
的證書的
CA
的證書鏈。否則只顯示
server
的證書。
? ? -prexit
? ?
當程序退出的時候打印
session
的信息。即使連接失敗,也會打印出調試信息。一般如果連接成功的話,調試信息將只被打出來一次。本
option
比較有
用,因為在一次
SSL
連接中,
cipher
也可能改變,或者連接可能失敗。要注意的是:有時候打印出來的東西并不一定準確。
(
這樣也行??
eric,
言重了
.)
? ? -state
? ?
打印
SSL session
的狀態,
ssl
也是一個協議,當然有狀態。
? ? -debug
? ?
打印所有的調試信息。
? ? -nbio_test
? ?
檢查非阻塞
socket
的
I/O
運行情況。
? ? -nbio
? ?
使用非阻塞
socket
? ? -crlf
? ?
回把你在終端輸入的換行回車轉化成
/r/n
送出去。
? ? -ign_eof
? ?
當輸入文件到達文件尾的時候并不斷開連接。
? ?-quiet
? ?
不打印出
session
和證書的信息。同時會打開
-ign_eof
這個
option.
? ?-ssl2, -ssl3, -tls1, -no_ssl2, -no_ssl3, -no_tls1
? ?
選擇用什么版本的協議。很容易理解,不用多解釋了吧。
? ?
注意,有些很古老的
server
就是不能處理
TLS1,
所以這個時候要關掉
TLS1.n.
? ?-bugs
? ?SSL/TLS
有幾處眾所周知的
bug, set
了這個
option
使出錯的可能性縮小。
? ?-cipher cipherlist
? ?
由我們自己來決定選用什么
cipher
,盡管是由
server
來決定使用什么
cipher,
但它一般都會采用我們送過去的
cipher
列表里的第一個
cipher.
? ?
有哪些
cipher
可用?指令
cipher
對這個解釋的更清楚。
? ?
一旦和某個
SSL server
建立連接之后,所有從
server
得到的數據都會被打印出來,所有你在終端上輸入的東西也會被送給
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 /"
什么的去獲得網頁了。
? ?
如果握手失敗,原因可能有以下幾種:
? ? 1. server
需要驗證你的證書,但你沒有證書
? ? 2.
如果肯定不是原因
1,
那么就慢慢一個一個
set
以下幾個
option
? ? -bugs, -ssl2, -ssl3, -tls1, -no_ssl2, -no_ssl3, -no_tls1
? ?
這可能是因為對方的
server
處理
SSL
有
bug.
? ?
有的時候,
client
會報錯:沒有證書可以使用,或者供選擇的證書列表是空的。這一般是因為
Server
沒有把給你簽名的
CA
的名字列進它自己認為可以
信任的
CA
列表
,
你可以用檢查一下
server
的信任
CA
列表。有的
http server
只在
client
給出了一個
URL
之后才驗證
client
的證書,這中情況下要
set -prexit
這個
option,
并且送給
server
一個頁面請求。
? ?
即使使用
-cert
指明使用的證書,如果
server
不要求驗證
client
的證書,那么該證書也不會被驗證。所以不要以為在命令行里加了
-cert
的參數又連接成功就代表你的證書沒有問題。
? ?
如果驗證
server
的證書沒有問題,就可以
set -showcerts
來看看
server
的證書的
CA
鏈了。
? ?
其實這個工具并不好用,
自己寫一個
client
的會方便很多。
? ?
舉例時間:
? ?
注意,中間的
pop3
協議的指令是我通過終端輸入的。其他都是程序輸出的對話
? ?
過程。具體的每行意義不用解釋了。
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
? ? MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ
? ? dHkgTHRkMRIwEAYDVQQDEwlmb3JkZXNpZ24xITAfBgkqhkiG9w0BCQEWEmZvcmRl
? ? aXNnbkAyMWNuLmNvbTAeFw0wMDExMTIwNjE5MDNaFw0wMTExMTIwNjE5MDNaMH0x
? ? CzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMQswCQYDVQQHEwJnejEP
? ? MA0GA1UEChMGYWkgbHRkMQswCQYDVQQLEwJzdzESMBAGA1UEAxMJZm9yZGVzaWdu
? ? MRowGAYJKoZIhvcNAQkBFgt4eHhAeHh4LnhvbTCBnzANBgkqhkiG9w0BAQEFAAOB
? ? jQAwgYkCgYEAuQVRVaCyF+a8/927cA9CjlrSEGOL17+Fk1U6rqZ8fJ6UR+kvhUUk
? ? fgyMmzrw4bhnZlk2NV5afZEhiiNdRri
? ? 6jhWfoqGNCKh/92cjq2wicJpp40wZGlfwTwSnmjN9/eNVwEoXigSy5ECAwEAAaOC
? ? AQYwggECMAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJh
? ? dGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBS+WovE66PrvCAtojYMV5pEUYZtjzCB
? ? pwYDVR0jBIGfMIGcgBRpQYdVvVKZ0PXsEX8KAVNYTgt896GBgKR+MHwxCzAJBgNV
? ? BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
? ? aWRnaXRzIFB0eSBMdGQxEjAQBgNVBAMTCWZvcmRlc2lnbjEhMB8GCSqGSIb3DQEJ
? ? ARYSZm9yZGVpc2duQDIxY24uY29tggEAMA0GCSqGSIb3DQEBBAUAA4GBADDOp/O/
? ? o3mBZV4vc
? ? 0i4LlsiQw+EwpnjUXfUBxp/g4Cazlv57mSS6h1t
? ? 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: E1EC3B
? ? DC25DCD
? ? Session-ID-ctx:
? ? Master-Key: 47DB
? ? FA
? ? 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
? ? MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ
? ? dHkgTHRkMRIwEAYDVQQDEwlmb3JkZXNpZ24xITAfBgkqhkiG9w0BCQEWEmZvcmRl
? ? aXNnbkAyMWNuLmNvbTAeFw0wMDExMTIwNjE5MDNaFw0wMTExMTIwNjE5MDNaMH0x
? ? CzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMQswCQYDVQQHEwJnejEP
? ? MA0GA1UEChMGYWkgbHRkMQswCQYDVQQLEwJzdzESMBAGA1UEAxMJZm9yZGVzaWdu
? ? MRowGAYJKoZIhvcNAQkBFgt4eHhAeHh4LnhvbTCBnzANBgkqhkiG9w0BAQEFAAOB
? ? jQAwgYkCgYEAuQVRVaCyF+a8/927cA9CjlrSEGOL17+Fk1U6rqZ8fJ6UR+kvhUUk
? ? fgyMmzrw4bhnZlk2NV5afZEhiiNdRri
? ? 6jhWfoqGNCKh/92cjq2wicJpp40wZGlfwTwSnmjN9/eNVwEoXigSy5ECAwEAAaOC
? ? AQYwggECMAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJh
? ? dGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBS+WovE66PrvCAtojYMV5pEUYZtjzCB
? ? pwYDVR0jBIGfMIGcgBRpQYdVvVKZ0PXsEX8KAVNYTgt896GBgKR+MHwxCzAJBgNV
? ? BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
? ? aWRnaXRzIFB0eSBMdGQxEjAQBgNVBAMTCWZvcmRlc2lnbjEhMB8GCSqGSIb3DQEJ
? ? ARYSZm9yZGVpc2duQDIxY24uY29tggEAMA0GCSqGSIb3DQEBBAUAA4GBADDOp/O/
? ? o3mBZV4vc
? ? 0i4LlsiQw+EwpnjUXfUBxp/g4Cazlv57mSS6h1t
? ? 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: E1EC3B
? ? 5DCD
? ? Session-ID-ctx:
? ? Master-Key: 47DB
? ?
? ? Key-Arg : None
? ? Start Time: 974010506
? ? Timeout : 300 (sec)
? ? Verify return code: 0 (ok)
posted on 2006-10-17 15:46 捕風 閱讀(1838) 評論(0) 編輯 收藏 所屬分類: java安全