【小蜗牛嘻哈之作】
 
我们首先看看下面一段“对话”:
[root@pps ~]# openssl s_client -connect localhost:110 -starttls pop3
...
【这里是一大段有关证书、SSL/TLS会话等内容】
...

---
+OK Dovecot ready.

user snail
+OK
pass snail'password
+OK Logged in.
list
+OK 6 messages:
1 1731
2 43178
3 1727
4 43183
5 43217
6 43171
.

quit
+OK Logging out.
closed
[root@pps ~]#
 
这样的会话情况,是和"telnet localhost 110"进行POP3会话情况是一样的,而这里和telnet不一样的是,整个会话过程所传输的信息都是加密的。如上示例,我的机器上(localhost)需要开启POP3服务,并且POP3服务支持SSL/TLS加密传输。(我用的是Dovecot做的POP3/IMAP服务器)

参数说明:
s_client        用作一个普通的SSL/TLS会话的客户端
-starttls prot  在开始TLS传输之前使用STARTTLS命令来使得相关协议(prot)支持它。
                我使用的openssl(0.9.8b)版本只支持smtp和pop3协议。
                更新的版本应该支持imap协议。
 
如果没有指定"--starttls pop3",则出现POP3不支持SSL/TLS会话的现象:
[root@pps ~]# openssl s_client -connect localhost:110
CONNECTED(00000003)
2730:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:567:

如果某个服务器某端口“一开始”就支持SSL/TLS会话了,那就没有必要"--starttls"了。如果POP3S服务在默认的993端口监听着的话,就不必那么费劲使用"--starttls"了:
[root@pps ~]# openssl s_client -connect localhost:993
...
---
* OK Dovecot ready.
...
 
下面我再举个简单的例子。我使用两个终端,在一个终端运行以下命令:
[root@pps ~]# openssl s_server -accept 2009 -key server.pem -cert server.pem
Using default temp DH parameters
ACCEPT
 
参数解释:
s_server        用作一个普通的SSL/TLS会话的服务器端
-accept port    监听的端口
-cert arg       使用的证书(默认是server.pem)
-key arg        使用的密钥(默认是server.pem)
 
我这里使用的server.pem是随便生成的,证书和密钥都同在server.pem文件里。
 
然后我在另外一个终端运行命令如下:
[root@pps ~]# openssl s_client -connect localhost:2009
...
【这里是一大段有关证书、SSL/TLS会话等内容】
...
---
 
这个时候,在服务器端(s_server)也会出现SSL-Session相关信息。
 
好,我在客户端(s_client)这边输入"Hello, I'm a client.",回车,我们可以看到在服务器端可以立刻显示出来我输入的内容,在服务器端输入"Hello, I'm the server.",也可以立刻在客户端看到服务器输入的内容,最后我在服务端输入"quit"结束会话。 而整个会话传输过程,都是加密的,只有在两端才是解密的明文内容。
 
【注意】如果双方在会话过程中,第三方客户端连接将被阻塞。
 
------------------------------------------------------------------------------------------
赵小蜗牛
QQ: 755721501
E-mail:  [email][email protected][/email]
在不断奉献中谋求生存发展、打造自己的优秀品质,用人性最本质最动人的一面“营销”自己!