?
二十一.????
指令
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
? ?
指定驗(yàn)證深度。記得
CA
也是分層次的吧?如果對方的證書的簽名
CA
不是
Root CA,
那么你可以再去驗(yàn)證給該
CA
的證書簽名的
CA
,
一直到
Root CA.
目前的驗(yàn)證操作即使這條
CA
鏈上的某一個證書驗(yàn)證有問題也不會影響對更深層的
CA
的身份的驗(yàn)證。所以整個
CA
鏈上的問題都可以檢查出來。當(dāng)然
CA
的驗(yàn)證出
問題并不會直接造成連接馬上斷開,好的應(yīng)用程序可以讓你根據(jù)驗(yàn)證結(jié)果決定下一步怎么走。
? ? -CApath directory
? ?
一個目錄。里面全是
CA
的驗(yàn)證資料,該目錄必須是
"
哈希結(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
比較有
用,因?yàn)樵谝淮?/span>
SSL
連接中,
cipher
也可能改變,或者連接可能失敗。要注意的是:有時候打印出來的東西并不一定準(zhǔn)確。
(
這樣也行??
eric,
言重了
.)
? ? -state
? ?
打印
SSL session
的狀態(tài),
ssl
也是一個協(xié)議,當(dāng)然有狀態(tài)。
? ? -debug
? ?
打印所有的調(diào)試信息。
? ? -nbio_test
? ?
檢查非阻塞
socket
的
I/O
運(yùn)行情況。
? ? -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.
這是人機(jī)交互式的。這時候不能
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
需要驗(yàn)證你的證書,但你沒有證書
? ? 2.
如果肯定不是原因
1,
那么就慢慢一個一個
set
以下幾個
option
? ? -bugs, -ssl2, -ssl3, -tls1, -no_ssl2, -no_ssl3, -no_tls1
? ?
這可能是因?yàn)閷Ψ降?/span>
server
處理
SSL
有
bug.
? ?
有的時候,
client
會報錯:沒有證書可以使用,或者供選擇的證書列表是空的。這一般是因?yàn)?/span>
Server
沒有把給你簽名的
CA
的名字列進(jìn)它自己認(rèn)為可以
信任的
CA
列表
,
你可以用檢查一下
server
的信任
CA
列表。有的
http server
只在
client
給出了一個
URL
之后才驗(yàn)證
client
的證書,這中情況下要
set -prexit
這個
option,
并且送給
server
一個頁面請求。
? ?
即使使用
-cert
指明使用的證書,如果
server
不要求驗(yàn)證
client
的證書,那么該證書也不會被驗(yàn)證。所以不要以為在命令行里加了
-cert
的參數(shù)又連接成功就代表你的證書沒有問題。
? ?
如果驗(yàn)證
server
的證書沒有問題,就可以
set -showcerts
來看看
server
的證書的
CA
鏈了。
? ?
其實(shí)這個工具并不好用,
自己寫一個
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)