Linux管理員必用:OpenSSL服務(wù)器測(cè)試技巧
譯文OpenSSL是一款開源工具包,用于實(shí)現(xiàn)安全套接層(SSL)和傳輸層安全(TLS)協(xié)議,它對(duì)于大多數(shù)負(fù)責(zé)安全網(wǎng)絡(luò)工作的Linux管理員來說是必不可少的一款日常工具。但是OpenSSL還包括豐富的功能,連經(jīng)驗(yàn)老到的資深人士也可能不太熟悉這些功能。你可以使用OpenSSL來測(cè)試POP和IMAP服務(wù)器,并且測(cè)試服務(wù)器的連接速度,還有其他值得關(guān)注的用途。
OpenSSL測(cè)試POP和IMAP服務(wù)器
當(dāng)你部署一臺(tái)新的郵件服務(wù)器,或者對(duì)舊的郵件服務(wù)器進(jìn)行更改時(shí),傳統(tǒng)的telnet仍是測(cè)試未加密的POP和IMAP服務(wù)器會(huì)話的保留工具。但是如果是使用TLS/SSL加密的服務(wù)器,該怎么辦呢?Telnet無法與這些服務(wù)器進(jìn)行對(duì)話。要測(cè)試這些服務(wù)器,最快速、最容易的辦法就是使用OpenSSL的s_client選項(xiàng)。s_client是一個(gè)普通的SSL/TLS客戶端,用來測(cè)試使用TLS/SSL的所有服務(wù)器。
要測(cè)試POP服務(wù)器,先給自己發(fā)送一堆測(cè)試消息,那樣你就有東西可以處理了。使用域名或IP地址和端口號(hào),連接到POP3S服務(wù)器;端口995是標(biāo)準(zhǔn)的POP3S端口:
$ openssl s_client -connect mailserver.com:995
你會(huì)看到好多信息一閃而過,最后會(huì)出現(xiàn)這樣的內(nèi)容:
Verify return code: 18 (self signed certificate)
---
+OK Hello there.
這個(gè)響應(yīng)表明這是一臺(tái)Courier POP3服務(wù)器。另一種流行的POP3服務(wù)器Dovecot會(huì)有這樣的響應(yīng):
Verify return code: 18 (self signed certificate)
---
+OK Dovecot ready.
我想,大概Courier很害羞,不想表明身份。每一種響應(yīng)都確認(rèn)了服務(wù)器在運(yùn)行,在響應(yīng)客戶端請(qǐng)求;核實(shí)了TSL/SSL加密處于正常工作狀態(tài)。如果你想了解更多的詳細(xì)信息,可以用tee命令把相當(dāng)冗長的輸出結(jié)果記下來,以便進(jìn)一步分析。該命令將命令結(jié)果導(dǎo)到文本文件上,同時(shí)將它顯示在屏幕上:
$ openssl s_client -connect mailserver.com:995 | tee pop3s.txt
如果輸出內(nèi)容看起來正確,也沒有報(bào)告你的SSL證書有何問題,那么服務(wù)器極可能處于良好的工作狀態(tài),準(zhǔn)備投入運(yùn)行。要不然,你可能會(huì)看到這個(gè)常見的錯(cuò)誤消息:
Verify return code: 20 (unable to get local issuer certificate)
這意味著,OpenSSL找不到你存儲(chǔ)的可信證書管理機(jī)構(gòu)(CA)。安裝的每一個(gè)Linux系統(tǒng)都默認(rèn)存儲(chǔ)了Verisign、Thawte和Comodo等各大商業(yè)CA的證書,以及你在上網(wǎng)沖浪或使用電子郵件時(shí)添加的任何CA。(比如當(dāng)你訪問網(wǎng)站時(shí),F(xiàn)irefox彈出一些警示內(nèi)容,表明該網(wǎng)站在使用不可信的CA,提示你是否果真確信要訪問該網(wǎng)站?你是否想要添加例外。)你可以告訴s_client你的郵件服務(wù)器的CA在哪里:
$ openssl s_client -connect mailserver.com:995 -CApath /etc/ssl/certs/
然后,它應(yīng)該會(huì)顯示Verify return code: 0 (ok).
現(xiàn)在,你可以收閱電子郵件,看看測(cè)試郵件有沒有送達(dá)。輸入下面的粗體命令,使用你自己的登錄信息。非粗體的幾行是服務(wù)器響應(yīng):
$ +OK Dovecot ready
user carla
+OK
pass password
+OK Logged in.
stat
+OK 2 4761
list
+OK
1 2232
2 2531
.
retr 1
+OK 2232 octets
Return-path:<admin@test.net>
[...]
stat告訴你收件箱里面有多少封郵件及郵件大小。list列出了你的郵件。retr檢索郵件,并按照列表號(hào)來顯示,顯示了所有標(biāo)題,然后是郵件正文。你完成后,只需輸入quit。
#p# 測(cè)試IMAP服務(wù)器
測(cè)試IMAP服務(wù)器需要使用一套不同的命令。粗體的行同樣是你輸入的命令。為了簡潔起見,我只摘了服務(wù)器輸出的一部分:
$ openssl s_client -connect mailserver.com:993
[...]
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
. login carla password
. OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE [...] LIST-STATUS QUOTA] Logged in
. list "" "*"
LIST (\HasChildren) "." "INBOX"
* LIST (\HasNoChildren) "." "INBOX.work"
* LIST (\HasNoChildren) "." "INBOX.personal"
* LIST (\HasNoChildren) "." "INBOX.Trash"
. examine INBOX
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft Junk NonJunk $Forwarded)
* OK [PERMANENTFLAGS ()] Read-only mailbox.
* 1 EXISTS
* 1 RECENT
* OK [UNSEEN 1] First unseen.
[...]
. OK [READ-ONLY] Select completed.
. fetch 1 rfc822.text
* 1 FETCH (RFC822.TEXT {9}
test message, do not read. Kthx.
)
. OK Fetch completed.
. logout結(jié)束會(huì)話。list "" "*"命令列出了你的所有郵箱,而examine INBOX意味著列出收件箱里面的郵件。fetch 1 rfc822.text只顯示郵件文本,不顯示標(biāo)題。要注意開頭的點(diǎn);這是個(gè)命令標(biāo)記,必須要有。標(biāo)記可以是任何字符或字符組合,不得有空格,而且必須放在你輸入的每個(gè)命令前面。IMAP 會(huì)用你選擇的命令標(biāo)記給其回復(fù)作上標(biāo)記,不過不知什么原因,它把點(diǎn)換成了星號(hào)。如果你使用數(shù)字或字母,它就會(huì)使用那些數(shù)字或字母;你可以試用不同的標(biāo)記,就很容易看到。IMAP允許多個(gè)連接,所以標(biāo)記告訴你命令和響應(yīng)屬于哪一個(gè)連接。
RFC 1939詳細(xì)描述了所有POP3命令和會(huì)話中的正確步驟,RFC 3501則詳細(xì)描述了IMAP4。
#p# 測(cè)試遠(yuǎn)程連接速度
OpenSSL隨帶一個(gè)內(nèi)置的基準(zhǔn)測(cè)試套件,該套件含有連接測(cè)試速度:
$ openssl s_time -cipher DHE-RSA-AES256-SHA -connect mailserver.com:993
我拷貝了來自s_client會(huì)話的密文列表,服務(wù)器在其中告訴你它支持哪些密文。你還可以不用指定任何密文,就運(yùn)行測(cè)試。OpenSSL會(huì)提出抱怨,但還是會(huì)運(yùn)行測(cè)試。當(dāng)你不指定密文時(shí),運(yùn)行起來速度通常比較慢,所以如果你的郵件客戶端讓你可以選擇使用哪個(gè)密文,你可能會(huì)看到運(yùn)行速度比較快。
你可以在任何服務(wù)器上使用這個(gè)命令,比如能夠支持HTTPS的Web服務(wù)器:
$ openssl s_time -connect webserver.com:443
OpenSSL參考手冊(cè)頁不是很詳細(xì)或很有幫助。要獲得更多的信息,一個(gè)辦法就是故意以錯(cuò)的方式運(yùn)行命令,比如openssl s_time foo。OpenSSL在作出響應(yīng)時(shí)會(huì)提供選項(xiàng)摘要。如果你更喜歡閱讀出色的入門書,Joshua Davies所著的《使用密碼和PKI實(shí)現(xiàn)SSL/TLS》(Implementing SSL / TLS Using Cryptography and PKI)是這方面的經(jīng)典圖書之一,而且該書內(nèi)容很新。如果你不想花錢,可以下載OpenSSL源代碼,研讀與源代碼捆綁的說明文檔。
最后,為了供你參考備用,下面列出了Web服務(wù)器和郵件服務(wù)器的標(biāo)準(zhǔn)端口;當(dāng)然,任何Linux系統(tǒng)上的/etc/services都含有完整的列表。
•smtp 25/tcp
•http 80/tcp
•pop3 110/tcp/udp
•imap4 143/tcp/udp
•https 443/tcp/udp
•ssmtp 465/tcp
•imaps 993/tcp/udp
•pop3s 995/tcp/udp
原文鏈接:http://olex.openlogic.com/wazi/2011/openssl-expert-tips-and-tricks-test-and-benchmark-servers/