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