Sun Java System Instant Messaging 7.2 管理指南

第 12 章 使用 TLS 和传统 SSL 保证 Instant Messaging 的安全性

Instant Messaging 支持通过 TLS(Transport Layer Security,传输层安全)和传统 SSL(Secure Sockets Layer,安全套接字层)实现安全通信。本章的以下各节提供了有关使用这些协议来设置 Instant Messaging 安全性的说明:

在 Instant Messaging 中使用 TLS 和传统 SSL 的概述

对于客户机到服务器和服务器到服务器的加密通信以及服务器间基于证书的验证,Instant Messaging 使用传输层安全 (Transport Layer Security, TLS) 1.0 协议的 startTLS 扩充。此外,对于 Instant Messenger 和多路复用器之间的加密通信,Instant Messaging 支持传统的 SSL 协议(版本 3.0)。在更高的版本中,将使用证书来验证客户机所连接的服务器的身份,但证书不会用于验证。

多路复用器与服务器之间的通信基于不安全的传输。将 TLS 用于客户机到服务器的通信时,多路复用器仅在客户机与服务器之间来回传送字节,并不会执行任何加密和解密操作。

TLS 与 SSL 完全兼容,并且包括所有必要的 SSL 功能。TLS 和 SSL 是 XMPP 和 HTTP 应用层下的协议层。


注意 – 注意 –

如果将多路复用器设置为仅使用传统 SSL,则 Instant Messenger 将仅使用 SSL 来连接到多路复用器,并且会忽略服务器返回的所有有关 TLS 可用性的信息。然而,如果选择将传统 SSL 用于多路复用器,应将所有 XMPP/HTTP 网关实例配置为直接与服务器而非多路复用器通信。网关不支持传统 SSL。基于传统 SSL 连接到多路复用器并随后请求 TLS 连接的第三方客户机则可执行此操作。

此外,多路复用器基于不安全的传输连接到服务器。如果要保证端对端(客户机通过多路复用器到服务器以及返回)通信的安全性,使用 TLS 代替传统 SSL。


要将 TLS 用于 Instant Messaging 服务器,必须使用 Java 1.5(最低版本)。

有关 XMPP 中的 TLS 和 StartTLS 的信息,参见 RFC 3920 Extensible Messaging and Presence Protocol: Core 中的 "Use of TLS"。有关证书、SSL 和 TLS 的概述,参见《Sun Java System Application Server Enterprise Edition 8.2 管理指南》中的《Sun Java System Application Server Enterprise Edition 8.2 Administration Guide》中的“Introduction to Certificates and SSL”。本小节中的各程序假定您要使用 Sun JavaTM System Application Server 来生成证书。如果要使用另一 Web 容器,需参阅该 Web 容器的相关文档,获取有关生成密钥库和证书的特定说明。

为 Instant Messaging 服务器设置 TLS

要为 Instant Messaging 服务器到服务器和客户机到服务器通信启用 TLS,需执行以下常规步骤:

  1. 使用 keytool 实用程序创建 Java 密钥库 (Java keystore, JKS) 和私钥。

    有关 keytool 实用程序的概述,参见《Sun Java System Application Server Enterprise Edition 8.2 管理指南》中的《Sun Java System Application Server Enterprise Edition 8.2 Administration Guide》中的“Tools for Managing Security”。有关使用 Sun Java System Application Server 生成 JKS 的说明,参见《Sun Java System Application Server Enterprise Edition 8.2 管理指南》中的《Sun Java System Application Server Enterprise Edition 8.2 Administration Guide》中的“Working with Certificates and SSL”

  2. 使用私钥生成 Instant Messaging 服务器的服务器证书。

    有关说明,参见《Sun Java System Application Server Enterprise Edition 8.2 管理指南》中的《Sun Java System Application Server Enterprise Edition 8.2 Administration Guide》中的“Generating a Certificate Using the keytool Utility”

  3. 获取由证书颁发机构 (Certificate Authority, CA) 签署的 Instant Messaging 服务器证书。

    有关说明,参见《Sun Java System Application Server Enterprise Edition 8.2 Administration Guide》中的“Signing a Digital Certificate Using the keytool Utility”。在适当的位置用 Instant Messaging 替换 Application Server。

  4. 重新启动 Instant Messaging 服务器。

    有关详细信息,参见启动 Instant Messaging 组件

  5. 获取 CA 的根证书。

    有关获取 CA 根证书的说明,请联系您的 CA。

  6. 将证书导入密钥库中。

    使用 keytool 实用程序将 CA 根证书和已签署的服务器证书导入密钥库中,如《Sun Java System Application Server Enterprise Edition 8.2 管理指南》中的《Sun Java System Application Server Enterprise Edition 8.2 Administration Guide》中的“Using the keytool Utility”中所述。

  7. 通过在 iim.conf 中设置相应的参数来在服务器中激活 TLS。

    有关说明,参见在 Instant Messaging 服务器上激活 TLS

  8. 对于基于 TLS 的服务器到服务器通信,需对每台要基于 TLS 实现通信的服务器重复这些步骤。无需执行任何操作来配置 Instant Messenger 以使用 TLS。也无需针对 TLS 配置多路复用器,但是,如果打算使用 TLS,则不可将多路复用器设置为使用传统 SSL。

  9. 如果要在部署中使用 XMPP/HTTP 网关,则将网关配置为直接与 Instant Messaging 服务器而非多路复用器通信。

如果您正使用 Sun Java System Application Server,《Sun Java System Application Server Enterprise Edition 8.2 Administration Guide》中的“Working with Certificates and SSL”中有步骤 1 至 5 的说明。在 Instant Messaging 服务器上激活 TLS中描述了步骤 6。

在 Instant Messaging 服务器上激活 TLS

在服务器上激活 TLS 前,必须创建一个 JKS,获取和安装一个已签署的服务器证书,并信任 CA 的证书,如为 Instant Messaging 服务器设置 TLS中所述。要将 TLS 用于服务器到服务器和/或客户机到服务器的通信,在服务器上激活 TLS。

表 12–1 列出了 iim.conf 中用来在 Instant Messaging 服务器中启用 TLS 的参数。还包含这些参数的说明和默认值。

表 12–1 Instant Messaging 服务器 TLS 配置参数

参数 

默认值 

说明 

iim_server.sslkeystore

无 

包含服务器的 Java 密钥库 (Java keystore, JKS) 的相对路径和文件名。例如:


/im-cfg-base/server-keystore.jks

iim_server.keystorepasswordfile

sslpassword.conf

包含含有密钥库密码的文件的相对路径和名称。此文件包含下列行: 

Internal (Software) Token:password

其中 password 是保护密钥库的密码。

iim_server.requiressl

false

若为 true,则在建立初始流会话后,服务器将终止所有不请求 TLS 连接的连接。

iim_server.trust_all_cert

false

如果该值为 true,则服务器会信任所有证书(包括过期和自签署的证书),并且还会将证书信息添加到日志文件中。如果为 false,服务器将不会记录证书信息,并仅信任由 CA 签署的有效证书。

Procedure在 Instant Messaging 服务器中激活 TLS 通信

使用此程序配置 Instant Messaging 服务器以按照以下方式基于 TLS 实现安全通信:

开始之前

确保已创建 JKS,获取和安装了服务器证书,并将服务器配置为信任 CA 的证书,如为 Instant Messaging 服务器设置 TLS 中所述。

对于服务器到服务器的 TLS 通信,必须在要配置来使用 TLS 的每台服务器上完成此程序。

  1. iim.conf 中的以下参数添加值。

    如果参数尚未出现在 iim.conf 中,请进行添加。


    iim_server.sslkeystore=server-keystore.jks
    iim_server.keystorepasswordfile=sslpassword.conf
    

    服务器将使用其能够基于 TLS 实现通信的信息来回应任意客户机或另一 Instant Messaging 服务器的连接请求。然后提出请求的客户机或服务器将选择是否建立基于 TLS 的安全连接。

  2. 如果希望服务器将 TLS 用于来自所有客户机、远程和对等服务器的连接,在 iim.conf 中添加以下参数:


    iim_server.requiressl=true

    如果将此参数设置为 true,服务器会终止与不支持 TLS 的客户机或远程及对等服务器之间的连接。使用此参数来请求基于 TLS 的安全客户机到服务器通信。

    有关服务器到服务器通信的更多信息,参见第 8 章,多个 Instant Messaging 服务器的联合部署

  3. 如果要将 TLS 用于与特定远程或对等服务器之间的通信,将以下参数添加到 iim.conf


    iim_server.coserver1.requiressl=true

    为需要 TLS 的每个协同服务器设置此参数。

    如果将 iim_server.requiressl 设置为 true,服务器会要求与其通信的所有服务器均采用 TLS 连接。在这种情况下,无需为特定的协同服务器设置此参数。

  4. (可选的)如果希望服务器信任接收到的所有证书,并将证书信息添加到日志文件,将以下参数添加到 iim.conf


    iim_server.trust_all_cert=true

    注意 – 注意 –

    可能需要在上线前使用此功能来测试部署。然而,通常不应对已部署的系统执行此操作,因为这样会引起严重的安全风险。如果此值为 true,服务器会信任所有证书(包括过期和自签署的证书),并且还会将证书信息添加到日志文件中。如果为 false,服务器将不会记录证书信息,并仅信任由 CA 签署的有效证书。


  5. 使用 imadmin 刷新服务器配置。


    imadmin refresh server
    
  6. 验证 TLS 是否正常工作。

    可通过多种方式完成此操作,如通过执行调用 Instant Messenger 的安全版本中的步骤。


示例 12–1 iim.conf 中的 TLS 配置

以下是包含服务器到服务器和客户机到服务器的通信所需 TLS 配置的 iim.conf 文件的示例部分。本示例中参数的值可能与您的部署有所不同。


! Server to server communication port.
iim_server.port = "5269"
! Should the server listen on the server to server
! communication port
iim_server.useport = "True”
iim_server.coservers=coserver1
iim_server.coserver1.serverid=Iamcompany22
iim_server.coserver1.password=secretforcompany22
iim_server.coserver1.host=iim.i-zed.com:5269
iim_server.serverid=Iami-zed
iim_server.password=secret4i-zed
iim_server.trust_all_cert=true
iim_server.sslkeystore=/var/im/server_keystore.jks
iim_server.keystorepasswordfile=/var/im/sslpassword.conf

为多路复用器和 Instant Messenger 设置传统 SSL

如果要使用不支持 TLS 的 Instant Messaging 客户机,仍可使用 SSL 代替 TLS 实现客户机到多路复用器的通信。如果将多路复用器配置为使用 SSL,则无法将 TLS 用于客户机到服务器的通信。多路复用器与服务器之间的所有通信都会以明文格式在不安全的传输中进行。

如果在多路复用器上建立传统 SSL,并且要使用 XMPP/HTTP 网关,则必须配置网关以直接与服务器而非多路复用器通信。网关不支持传统 SSL。

在多路复用器和 Instant Messenger 之间启用 SSL 需执行以下步骤:

  1. 向 CA 请求用于 Instant Messaging 多路复用器的 SSL 证书

  2. 安装证书

  3. 在多路复用器和 Instant Messenger 之间启用传统 SSL

  4. 在 Instant Messaging 服务器上激活 TLS

  5. 调用 Instant Messenger 的安全版本

向 CA 请求用于 Instant Messaging 多路复用器的 SSL 证书

要在多路复用器中启用 SSL,需请求一个证书。

Procedure请求用于 Instant Messaging 多路复用器的证书

本小节假定您要将 Sun Java System Web Server 或 Sun Java System Application Server 用作 Web 容器来请求证书。

多路复用器使用 NSS 来实现证书管理,因此可使用 NSS 实用程序来创建、管理和使用证书以及证书数据库。

  1. 在 Web 浏览器中,键入以下 URL 来启动 Web 容器的管理服务器:


    http://hostname.domain-name:administration-port
    

    出现一个窗口,提示您输入用户名和密码。

  2. 键入安装 Web Server 和 Application Server 期间指定的管理用户名和密码。

    出现“管理服务器”页面。

  3. 创建一个单独的 Web Server 或 Application Server 实例。

    有关安装多个 Application Server 实例的更多信息,参见《Sun Java System Application Server Enterprise Edition 8.2 Installation Guide》。有关安装多个 Web Server 实例的信息,参见《Sun Java Communications Suite 5 Installation Guide》

  4. 创建信任数据库以存储公钥和私钥,被称为密钥对文件。

    密钥对文件用于 SSL 加密。

    有关创建信任数据库的信息,参见《Sun Java System Application Server Enterprise Edition 8.2 管理指南》中的《Sun Java System Application Server Enterprise Edition 8.2 Administration Guide》中的第 9  章 “Configuring Security”(适用于 Application Server)和《Sun Java System Web Server 7.0 管理员指南》中的《Sun Java System Web Server 7.0 Administrator’s Guide》中的第 6  章 “Certificates and Keys”(适用于 Web Server)。

  5. 从 CA 处请求证书。

    有关请求证书的更多信息,参见《Sun Java System Application Server Enterprise Edition 8.2 管理指南》中的《Sun Java System Application Server Enterprise Edition 8.2 Administration Guide》中的第 9  章 “Configuring Security”(适用于 Application Server)和《Sun Java System Web Server 7.0 管理员指南》中的《Sun Java System Web Server 7.0 Administrator’s Guide》中的第 6  章 “Certificates and Keys”(适用于 Web Server)。

安装证书

从证书颁发机构处接收到已签署的服务器证书后,需安装证书并创建数据库以实现安全通信。

Procedure为 Instant Messaging 多路复用器安装证书

  1. 在 Web 浏览器中,键入以下 URL 启动管理服务器:


    http://hostname.domain-name:administration-port
    

    出现一个窗口,提示您输入用户名和密码。

  2. 键入安装 Web Server 或 Application Server 期间指定的管理用户名和密码。

    出现“管理服务器”页面。

  3. 安装服务器证书。

    有关安装证书的更多信息,参见http://docs.sun.com 上的 Web Server 或 Application Server 产品文档

  4. 转至 Web Server 或 Application Server 的 /alias 目录。

  5. 将数据库文件从 /alias 目录复制到 Instant Messaging 服务器的 im-cfg-base 目录。

    例如,在 Solaris 中:


    cp https-serverid-hostname-cert8.db /etc/opt/SUNWiim/default/config/cert8.db
    

    cp https-serverid-hostname-key3.db /etc/opt/SUNWiim/default/config/key3.db
    

    cp secmod.db /etc/opt/SUNWiim/default/config/secmod.db
    

    在 Linux 中:


    cp https-serverid-hostname-cert8.db /etc/opt/sun/im/default/config/cert8.db
    

    cp https-serverid-hostname-key3.db /etc/opt/sun/im/default/config/key3.db
    

    cp secmod.db /etc/opt/sun/im/default/config/secmod.db
    

    注 –

    需允许多路复用器所使用的系统用户对 cert7.db key3.dbsecmod.db 文件拥有读取权限。此外,如果创建了多个 Instant Messaging 实例,则 /default 目录的名称将有所不同,具体取决于实例。


    有关 im-cfg-base 的默认位置,参见表 3–1

  6. 转至多路复用器主机上的 im-cfg-base

    有关查找 im-cfg-base 的信息,参见Instant Messaging 服务器目录结构

  7. 使用所选的文本编辑器创建名为 sslpassword.conf 的文件。

  8. sslpassword.conf 中输入以下行:


    Internal (Software) Token:password
    

    其中 password 为创建信任数据库时指定的密码。

  9. 保存并关闭 sslpassword.conf

  10. 确保所有 Instant Messenger 最终用户都具有 sslpassword.conf 的拥有权和读取权限。

  11. 重新启动多路复用器。

  12. 验证 SSL 是否正常工作。

    可通过多种方式完成此操作,如通过执行调用 Instant Messenger 的安全版本中的步骤。

  13. 以管理员身份登录 Web Server 或 Application Server。

  14. 删除请求证书时创建的服务器实例。

在多路复用器和 Instant Messenger 之间启用传统 SSL

可为客户机到多路复用器的通信启用 SSL,具体方法为修改 iim.conf 中的参数,然后使用 Instant Messenger 客户机的安全版本来连接到多路复用器。

表 12–2 列出了 iim.conf 中用于在 Instant Messenger 和多路复用器之间启用 SSL 的参数。还列出了这些参数的说明和默认值。

表 12–2 Instant Messaging 多路复用器 SSL 参数

参数 

默认值 

说明 

iim_mux.usessl

off

如果此值设置为 on,则多路复用器在交换应用数据之前,要求它所接受的每一连接均进行 SSL 信号交换。

iim_mux.secconfigdir

Solaris:/etc/opt/SUNWiim/default/config

Linux:/etc/opt/sun/im/default/ config

此目录包含密钥和证书数据库。通常包含安全模块数据库。此外,如果创建了多个 Instant Messaging 实例,则 /default 目录的名称将有所不同,具体取决于实例。有关更多信息,参见在单个 Instant Messaging 安装中创建多个实例

iim_mux.keydbprefix

(空字符串) 

此值包含密钥数据库文件名的前缀。密钥数据库文件名必须始终以 key3.db 结尾。

例如,如果密钥数据库包含前缀(例如 This-Database-key3.db ),则此参数的值为 This-Database

iim_mux.certdbprefix

(空字符串) 

此值包含证书数据库文件名的前缀。证书数据库文件名必须始终以 cert7.db 结尾。

例如,如果证书数据库包含前缀(如Secret-stuff-cert7.db),则此参数的值为 Secret-stuff

iim_mux.secmodfile

secmod.db

此值包含安全模块文件的名称。 

iim_mux.certnickname

Multiplexor-Cert

此值包含在安装证书时输入的证书名称。 

证书名称区分大小写。 

iim_mux.keystorepasswordfile

sslpassword.conf

此值包含具有密钥数据库密码的文件的相对路径和名称。此文件包含下列行: 

Internal (Software) Token:password

其中 password 是保护密钥数据库的密码。

Procedure在 Instant Messenger 和多路复用器之间启用 SSL

  1. 打开 iim.conf

    有关查找和修改 iim.conf 的说明,参见iim.conf 文件语法

  2. 表 12–2 中的值添加到 iim.conf 中的多路复用器配置参数。


示例 12–2 iim.conf 中传统 SSL 多路复用器配置

下面是一个包含多路复用器配置参数的 iim.conf 示例:


! IIM multiplexor configuration
! =============================
!
! Multiplexor specific options

! IP address and listening port for the multiplexor.
! WARNING: If this value is changed, the port value of ’-server’
! argument in the client’s im.html and im.jnlp files should 
! also be changed to match this.
iim_mux.listenport = "siroe.com:5222"

! The IM server and port the multiplexor talks to.
iim_mux.serverport = "siroe.com:45222"

! Number of instances of the multiplexor.
iim_mux.numinstances = "1"

! Maximum number of threads per instance
iim_mux.maxthreads = "10"

! Maximum number of concurrent connections per multiplexor process
iim_mux.maxsessions = "1000"

                         
iim_mux.usessl = "on"
iim_mux.secconfigdir = "/etc/opt/SUNWiim/default/config"
iim_mux.keydbprefix = "This-Database"
iim_mux.certdbprefix = "Secret-stuff"
iim_mux.secmodfile = "secmod.db"
iim_mux.certnickname = "Multiplexor_Cert"
iim_mux.keystorepasswordfile = "sslpassword.conf"

调用 Instant Messenger 的安全版本

Instant Messenger 自动支持 TLS。如果已如在 Instant Messaging 服务器上激活 TLS 中所述,将服务器配置为使用 TLS,则当 Instant Messenger 连接到服务器时,服务器将与支持 TLS 会话客户机进行通信。然后 Instant Messenger 可请求将连接更改为使用 TLS。

可通过从 Web 浏览器访问 imssl.htmlimssl.jnlp 来调用 Instant Messenger 的传统 SSL 版本。这些文件位于资源目录下,资源目录是存储所有 Instant Messenger 资源的基目录。

也可将指向这些 applet 描述符文件的链接添加到 index.html 中。

一旦为多路复用器配置了传统 SSL 或为服务器配置了 TLS,就可验证 Instant Messenger 客户机已实现了安全连接。

Procedure验证安全的 Instant Messenger 连接

  1. 登录到 Instant Messenger。

    如果要使用传统 SSL,从 Web 浏览器访问 imssl.htmlimssl.jnlp。如果要使用 TLS,则正常访问客户机。有关信息,参见调用 Instant Messenger

    如果 TLS 可用且未将多路复用器设置为使用传统 SSL,Instant Messenger 将始终使用 TLS。

  2. 在 Instant Messenger 主窗口中,确保锁状图标可见。

    Instant Messenger 正在使用安全的传输(SSL 或 TLS)时,锁状图标将显示在主窗口的右下角。