这个文档解释了如何让James 2.1使用传输层安全协议(Transport Layer Security -TLS)加密客户端和服务器端的通信。
使James内部可以获得TLS/SSL服务器Sockets
James使用Sun Java Secure Sockets Extension (JSSE)基础架构提供TLS/SSL sockets。有几个代理商的 Java发布文件都包括JSSE包(比如 Sun Java 1.4.x,、IBM Java 1.3.x)。对于这些发布文件,请遵照代理商提供的指导 配置JVM使用JSSE服务。
如果你使用的Java发布文件不包含JSSE,你需要再单独下载JSSE包。可以在这里 获得JSSE包。请遵照Sun的指示安装并配置JSSE。
在任何情况下,你都需要静态的定义JSSE TLS的提供者。通常就是默认你安装的那个JSSE。
安装完 JSSE后,需要配置James利用JSSE提供的功能。
证书密钥库
要在James内部使用TLS/SSL你还需要一个证书密钥库。
配置 Server Socket Factory
初始的配置文件中有一个SSL配置的模板。在sockets配置块的server-sockets元素下的注释中包含了一个名为 "ssl"的服务器Socket工厂元素。配置的第一步就是把注释标记去掉。
服务器Socket工厂元素包含几个子元素。 你仅仅有必要调整其中的两到三个子元素。
必需的file元素制定了工厂所用的密钥库的位置,它是一个Unix风格的文件路径。如果制定的不是绝对路径,那么它 就被认为是应用程序安装目录下的apps/james/子目录的相对路径。
password元素是证书库的密码。这个密码应该在创建证书库的时候制定,打开证书库时需要这个密码。这个值是必需的。
最后,还必须调整type元素。这个元素的值可以是JSSE提供者支持的任何密钥库类型(查看JSSE文档中的详细介绍)。 初始的配置是JKS (Java Keystore)。
其余的子元素不需要修改或删除。
配置使用TLS的服务
每个服务 - SMTP、 POP3、 NNTP和 RemoteManager - 都可以支持TLS。这些服务都有一个 可选的布尔类型配置元素useTLS。当这个值设为true时,服务就会用"ssl" 服务器socket工厂创建服务器socket连接。
验证使用TLS的James服务
在你为某个服务配置完成TLS/SSL连接后,这个服务端口应该不再接受不加密的TCP/IP连接。可以用 telnet直接连到该服务端口进行测试,telnet连接应该超时挂起。
为了证实这个服务端口能正确的接受SSL连接,需要一个SSL客户端和这个端口建立连接。 OpenSSL就一个这样的客户端,可以在OpenSSL 网站下载。 遵照SSL客户端的指示创建到服务端口的连接,连接成功后应该能够看到常用的服务问候。
,