Linux管理員必用:OpenSSL服務器測試技巧
譯文OpenSSL是一款開源工具包,用于實現安全套接層(SSL)和傳輸層安全(TLS)協議,它對于大多數負責安全網絡工作的Linux管理員來說是必不可少的一款日常工具。但是OpenSSL還包括豐富的功能,連經驗老到的資深人士也可能不太熟悉這些功能。你可以使用OpenSSL來測試POP和IMAP服務器,并且測試服務器的連接速度,還有其他值得關注的用途。
OpenSSL測試POP和IMAP服務器
當你部署一臺新的郵件服務器,或者對舊的郵件服務器進行更改時,傳統的telnet仍是測試未加密的POP和IMAP服務器會話的保留工具。但是如果是使用TLS/SSL加密的服務器,該怎么辦呢?Telnet無法與這些服務器進行對話。要測試這些服務器,最快速、最容易的辦法就是使用OpenSSL的s_client選項。s_client是一個普通的SSL/TLS客戶端,用來測試使用TLS/SSL的所有服務器。
要測試POP服務器,先給自己發送一堆測試消息,那樣你就有東西可以處理了。使用域名或IP地址和端口號,連接到POP3S服務器;端口995是標準的POP3S端口:
$ openssl s_client -connect mailserver.com:995
你會看到好多信息一閃而過,最后會出現這樣的內容:
Verify return code: 18 (self signed certificate)
---
+OK Hello there.
這個響應表明這是一臺Courier POP3服務器。另一種流行的POP3服務器Dovecot會有這樣的響應:
Verify return code: 18 (self signed certificate)
---
+OK Dovecot ready.
我想,大概Courier很害羞,不想表明身份。每一種響應都確認了服務器在運行,在響應客戶端請求;核實了TSL/SSL加密處于正常工作狀態。如果你想了解更多的詳細信息,可以用tee命令把相當冗長的輸出結果記下來,以便進一步分析。該命令將命令結果導到文本文件上,同時將它顯示在屏幕上:
$ openssl s_client -connect mailserver.com:995 | tee pop3s.txt
如果輸出內容看起來正確,也沒有報告你的SSL證書有何問題,那么服務器極可能處于良好的工作狀態,準備投入運行。要不然,你可能會看到這個常見的錯誤消息:
Verify return code: 20 (unable to get local issuer certificate)
這意味著,OpenSSL找不到你存儲的可信證書管理機構(CA)。安裝的每一個Linux系統都默認存儲了Verisign、Thawte和Comodo等各大商業CA的證書,以及你在上網沖浪或使用電子郵件時添加的任何CA。(比如當你訪問網站時,Firefox彈出一些警示內容,表明該網站在使用不可信的CA,提示你是否果真確信要訪問該網站?你是否想要添加例外。)你可以告訴s_client你的郵件服務器的CA在哪里:
$ openssl s_client -connect mailserver.com:995 -CApath /etc/ssl/certs/
然后,它應該會顯示Verify return code: 0 (ok).
現在,你可以收閱電子郵件,看看測試郵件有沒有送達。輸入下面的粗體命令,使用你自己的登錄信息。非粗體的幾行是服務器響應:
$ +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檢索郵件,并按照列表號來顯示,顯示了所有標題,然后是郵件正文。你完成后,只需輸入quit。
#p# 測試IMAP服務器
測試IMAP服務器需要使用一套不同的命令。粗體的行同樣是你輸入的命令。為了簡潔起見,我只摘了服務器輸出的一部分:
$ 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結束會話。list "" "*"命令列出了你的所有郵箱,而examine INBOX意味著列出收件箱里面的郵件。fetch 1 rfc822.text只顯示郵件文本,不顯示標題。要注意開頭的點;這是個命令標記,必須要有。標記可以是任何字符或字符組合,不得有空格,而且必須放在你輸入的每個命令前面。IMAP 會用你選擇的命令標記給其回復作上標記,不過不知什么原因,它把點換成了星號。如果你使用數字或字母,它就會使用那些數字或字母;你可以試用不同的標記,就很容易看到。IMAP允許多個連接,所以標記告訴你命令和響應屬于哪一個連接。
RFC 1939詳細描述了所有POP3命令和會話中的正確步驟,RFC 3501則詳細描述了IMAP4。
#p# 測試遠程連接速度
OpenSSL隨帶一個內置的基準測試套件,該套件含有連接測試速度:
$ openssl s_time -cipher DHE-RSA-AES256-SHA -connect mailserver.com:993
我拷貝了來自s_client會話的密文列表,服務器在其中告訴你它支持哪些密文。你還可以不用指定任何密文,就運行測試。OpenSSL會提出抱怨,但還是會運行測試。當你不指定密文時,運行起來速度通常比較慢,所以如果你的郵件客戶端讓你可以選擇使用哪個密文,你可能會看到運行速度比較快。
你可以在任何服務器上使用這個命令,比如能夠支持HTTPS的Web服務器:
$ openssl s_time -connect webserver.com:443
OpenSSL參考手冊頁不是很詳細或很有幫助。要獲得更多的信息,一個辦法就是故意以錯的方式運行命令,比如openssl s_time foo。OpenSSL在作出響應時會提供選項摘要。如果你更喜歡閱讀出色的入門書,Joshua Davies所著的《使用密碼和PKI實現SSL/TLS》(Implementing SSL / TLS Using Cryptography and PKI)是這方面的經典圖書之一,而且該書內容很新。如果你不想花錢,可以下載OpenSSL源代碼,研讀與源代碼捆綁的說明文檔。
最后,為了供你參考備用,下面列出了Web服務器和郵件服務器的標準端口;當然,任何Linux系統上的/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/