介绍
本文件概述了如何手动自定义的SSL支持的Openfire。截至Openfire的3.2证书管理,可以从管理控制台配置,然而,如果需要的话,你仍然可以手动管理证书使用JDK 1.5的工具。重要提示:一旦安装过程完成后,Openfire的根据Openfire的域名将创建自签名的证书。大多数用户应在创建由证书颁发机构签署的证书或替换创建的证书与自己的证书。
内置,Openfire的SSL支持使用标准的Java安全性的SSL实现(javax.net.ssl.SSLServerSocket)。在本文中,我们将介绍如何使用标准的JDK 1.5的工具来完成这些任务。
背景
服务器的SSL连接使用两套证书,以确保连接牢固安全。第一组被称为一个“密钥库”。 Keystore包含的服务器的密钥和证书。使用这些安全证书,以证明该服务器的客户端的合法代表一个特定的域。如果您的服务器只需要作为一个域,你只需要一个键盘输入和密钥库中的证书。密钥存储在keystore中下的别名。每个别名对应一个域名(如“example.com”)。
证书的第二组被称为“信任库”,并用于验证客户端合法代表一个特定的用户的操作。在绝大多数情况下,该信任库是空的,不会尝试使用SSL来验证客户端连接的服务器。相反,XMPP身份验证过程验证用户。但是,您可能希望要求某些客户端的SSL认证时,安全显得尤为重要和客户端连接到服务器的数量是比较小的。
证书尝试,以保证特定的一方是谁,他们声称是。证书是受信任的基础上签署的证书。如果您只需要轻安全,可信网络内部使用的部署,您可以使用“自签名”的证书。自签名证书加密客户端和服务器之间的通信通道。然而,通过一些其他的渠道,客户端必须验证自签名的证书的合法性。最常见的客户端一个自签名证书的反应是询问用户是否信任该证书,或静静地信任该证书是合法的。不幸的是,盲目地接受自签名的证书系统开辟了“人在中间的攻击。
一个自签名证书的优点是你可以创建他们的自由,这是伟大的,当成本是一个主要问题,或用于测试和评估。此外,您可以放心地使用自签名的证书,如果你可以确认你使用的证书是合法的。所以,如果一个系统管理员创建一个自签名的证书,然后亲自将其安装在客户端的信任库中(这样的证书是可信的),你可以放心,正确的客户端和服务器之间的SSL连接将只工作。
对于更高的安全部署,你应该得到你的签名的证书,证书颁发机构(CA)。客户端信任库通常将包含的主要CA证书,可以验证一个CA签署的证书。这一连串的信任,让客户端信任的服务器证书,他们从来没有与前互动。是相似的公证机构公证证书签名验证身份,保持记录,以同等金额和费用。
Sun JDK 1.5 安全工具
Sun的JDK(版本1.5.x版本)的所有安全工具,你需要配置SSL与Openfire的船只。最重要的是位于JAVA_HOME / bin目录下的JDK的keytool。 Sun JVM密钥库和信任文件是加密的。 Keytool是一个用来创建,读取,更新和删除这些文件中的条目。 Openfire的附带一个自签名的证书“虚拟”的设计进行初步评估测试。您将需要调整默认的配置来应对大多数部署。
为了配置SSL您的服务器上,您需要完成以下任务:
- 确定您的Openfire服务器的域。
- 为您的服务器域创建一个自签名的SSL服务器证书。注意:你可能已经有一个,如果你的的Openfire服务器域相匹配的现有的网络域的SSL。如果是的话,你可以直接跳到第4步。
- [可选]有一个证书颁发机构(CA)认证的SSL服务器证书。##生成一个证书签名请求(CSR)。
- 提交您的CSR的CA签署。
- 服务器证书导入到密钥库中。注意:如果你要使用步骤2中生成一个自签名的证书,该证书已经导入,你可以跳过这一步。
- 从密钥库中删除默认的证书。
- 客户端证书导入到信任库。
- 调整的Openfire配置正确的密钥库和信任的环境。
1. 确定你服务器上的域
Openfire服务器域的服务器的主机名匹配,例如,“example.com”的。 “user@example.com”的格式,如电子邮件地址,您的用户帐户地址。我们假设域名为“example.com”,其余的例子。
2. 创建一个自签名的SSL服务器证书
为了创建一个自签名的服务器证书的命令行,将目录更改到您的Openfire安装的资源/ security目录中去。您应该看到的默认keystore andtruststore的文件。首先,你应该更改默认的keystore密码:
keytool -storepasswd -keystore keystore
keytool将询问旧密码(默认情况下,它是changeit),到那时可以键入新的密码。现在,我们将使用keytool创建一个证书:
keytool -genkey -keystore keystore -alias example.com
你应该替换为example.com的服务器的名称。 keytool会要求存储密码,然后几个证书所需的信息。输入的所有信息,但要记住tocomplete问您的第一个和最后一个名字时,你的服务器的名称。在您输入所需的所有信息,keytool会问你的信息进行验证,并设置一个键的密码。作为存储密码,您必须使用相同的密钥密码。默认情况下,你只需按“输入”时的一个关键密码提示。
如果您以后更改密钥库密码记得要改变的条目的密码,以及使用keytool:
keytool -keypasswd -alias example.com -keystore keystore
Keytool will create certificates using the DSA algorithm by default. Some clients expect the server to have RSA certificates or they will fail to use TLS/SSL. Therefore, it is a good idea to also create RSA certificates in your keystore. To create certificates with the RSA algorithm you need to specify the algorithm to use like this:
keytool将创建默认情况下,使用DSA算法的证书。有些客户期望的服务器所拥有的RSA证书,否则将无法使用TLS/ SSL。因此,这是一个好主意,还可以创建你的密钥库中的RSA证书。要创建证书的RSA算法,你需要指定要使用的算法这样的:
keytool -genkey -keystore keystore -alias example.com -keyalg RSA
3. 生成一个证书签名请求(CSR)
如果你决定要一个CA签署的证书,你必须先在企业社会责任标准格式导出证书。为此,您可以用keytool:
keytool -certreq -keystore keystore -alias example.com -file certificate_file
你应该替换为example.com的服务器的名称和证书你希望产生certificate_file的文件的名称。生成的CSR提交给CA,并按照他们的指示得到签署。
4. 服务器证书导入到密钥库中
如果你有一个CA签署服务器证书,或者如果你有一个现有的SSL证书,则必须导入它使用keytool
keytool -import -keystore keystore -alias example.com -file signed_certificate_file
重要的是,别名已经有相关联的密钥,否则你会收到一个错误。
5. 从密钥库中删除默认的证书
导入您的证书后,您必须删除默认的证书使用keytool。
keytool -delete -keystore keystore -alias rsa
keytool -delete -keystore keystore -alias dsa
6. 信任库导入证书
如果您需要客户端验证自己使用证书,获得证书的信任库的keystore文件,而不是将它们导入。首先,你应该更改默认的信任库口令:
keytool -storepasswd -keystore truststore
keytool将询问旧密码(默认情况下,它是changeit),现在导入每个证书使用keytool:
keytool -import -keystore truststore -alias user_name -file certificate_file
7. Openfire配置
你最喜欢的浏览器,打开Openfire管理控制台中添加或更改下列系统属性:
- xmpp.socket.ssl.active -- 设置为“true”激活SSL
- xmpp.socket.ssl.port -- 使用SSL的端口(默认为5223 XMPP)
- xmpp.socket.ssl.storeType -- 使用的存储类型(“JKS”是Sun Java密钥库格式的JDK keytool的使用)。如果这个属性没有被定义,Openfire的假设值“JKS”
- xmpp.socket.ssl.keystore --您的Openfire安装根目录相对的keystore文件的位置。您可以离开此属性为空,使用默认密钥库。
- xmpp.socket.ssl.keypass --密钥库/密钥的密码
- xmpp.socket.ssl.truststore --不使用信任库中则留空白,否则设置您的Openfire安装根目录相对的truststore文件的位置。
- xmpp.socket.ssl.trustpass -- 改变的信任库/密钥密码
您将需要重新启动服务器后,修改任何上述系统属性才会生效