28.2. 管理与配置

28.2.1. apusic.conf文件中相关配置属性说明

多路复用的配置段在配置文件apusic.conf中,此文件在域主目录下的config目录下。

缺省的在apusic.conf配置文件中的多路复用配置段如下:

...
<SERVICE
    CLASS="com.apusic.net.Muxer"
    >
    <ATTRIBUTE NAME="Port" VALUE="6888"/>
    <ATTRIBUTE NAME="Backlog" VALUE="50"/>
    <ATTRIBUTE NAME="Timeout" VALUE="300"/>
    <ATTRIBUTE NAME="MaxWaitingClients" VALUE="500"/>
    <ATTRIBUTE NAME="WaitingClientTimeout" VALUE="5"/>
    <ATTRIBUTE NAME="SSLEnabled" VALUE="True"/>
    <ATTRIBUTE NAME="SecurePort" VALUE="6889"/>
    <ATTRIBUTE NAME="KeyStore" VALUE="config/sslserver"/>
    <ATTRIBUTE NAME="KeyPassword" VALUE="keypass"/>
</SERVICE>
...

目前,提供的多路复用端口的可配置属性概述如下:

属性描述值类型缺省值
Port多路复用端口号;HTTP、JNDI、JMS服务[注]0~65535间未被占用的端口号6888
Backlog对于未处理的连接请求,可保持在此端口的输入队列中的最大数量整型50
Timeout连接请求的等待时间整型,单位为秒300
MaxWaitingClients表示当服务器过忙而无法及时响应请求时对请求排队的队列长度(针对SSL服务的配置,正常情况下不需要)整型500
WaitingClientTimeout表示当队列已满时经过多长时间将请求抛弃(针对SSL服务的配置,正常情况下不需要)整型,单位为秒5
SSLEnabled是否启用SSL通讯。“True”或“False”True
SecurePortSSL通讯所使用的端口0~65535间未被占用的端口号6889
KeyStore保存服务器密钥和证书的密钥库文件相对于域的文件路径config/sslserver
KeyPasswordKeyStore密钥库的管理密码和密钥密码管理密码和密钥密码必须相同keypass
ServerCertificateKey服务器密钥文件,当不使用KeyStore文件方式时,使用此属性相对于域的文件路径
ServerCertificateChain对应服务器密钥文件的服务器证书链,以“;”为分隔符,首先是服务器证书,然后是颁发服务器证书的CA证书, 如果还有上层 CA,则依次加上。相对于域的文件路径
NeedClientAuth是否需要客户端认证“True”或“False”或“want”False
MutualAuthPort双向认证端口0~65535间未被占用的端口号6887
TrustStore信任库文件,它是保存客户端CA证书的密钥库文件相对于域的文件路径
TrustStorePassword信任库的密码,用于校验文件的完整性,可不填字符串类型
TrustStoreType信任库类型字符串类型JKS
TrustCertificates客户端CA证书,可填多个,以“;”为分隔符,当不使用TrustStore文件方式时,使用此属性相对于域的文件路径
TrustStorePassword可信密钥库密码字符串类型
TrustManagerFactoryAlgorithm可信密钥库算法字符串类型
CRLReloadCheckIntervalCRL检查间隔整型,单位为秒33
LookAheadTimeout预读取超时时间整型,单位为秒3
KeyStoreType密钥库类型字符串类型
KeyManagerFactoryAlgorithm密钥库算法字符串类型
SSLProtocolSSL协议类型,默认为TLSv1字符串类型TLSv1
Address多路复用地址字符串类型
TCPNoDelay对套接口设置TCP_NODELAY禁止Nagle算法,提高数据的实时响应性“True”或“False”False
EnableMuxAllow如果设置为true,表示开启这个功能,默认为false。开启后非http协议能够访问aas,ip地址将在MuxAllowIPs属性设置.“True”或“False”False
MuxAllowIPs设置可以访问非http协议的ip地址,如jconsole访问,默认本机都可以连接,多个ip地址用逗号分隔.如设置EnableMuxAllow为true后,如果MuxAllowIPs不设置,则默认只有本机能够使用jconsole访问aas,使用jndi获取数据源等功能;如果其他机器访问,则会被拒绝。如果确认其他机器需要访问,则需要配置ip地址列表.ip地址localhost
DisableHttp配置是否禁用HTTP协议访问功能“True”或“False”False

28.2.2. SSL配置

Apusic应用服务器完全支持SSL协议最新版SSL3.0和TLS1.0协议。本文将详细讲述如何在Apusic应用服务器上配置使用SSL双向认证。

28.2.2.1. TLS/SSL简介

为了在不安全的网络上安全保密的传输关键信息,Netscape公司开发了SSL协议,后来IETF(Internet Engineering Task Force)把它标准化了,并且取名为TLS,目前TLS的版本为1.0,TLS1.0的完整版本请参考rfc2246(www.ietf.org)。

基于TLS协议的通信双方的应用数据是经过加密后传输的,应用数据的加密采用了对称密钥加密方式,通信双方通过TLS握手协议来获得对称密钥。为了不让攻击者偷听、篡改或者伪造消息,通信的双方需要互相认证,来确认对方确实是他所声称的主体。TLS握手协议通过互相发送证书来认证对方,一般来说只需要单向认证,即客户端能确认服务器便可。但是对于对安全性要求很高的应用往往需要双向认证,以获得更高的安全性。下面详细讲述建立自己的认证机构,并且利用它来颁发服务器证书和客户端个人证书,然后配置服务器来使用双向认证。

28.2.2.2. 建立自己的认证授权机构CA

用户可以向可信的第三方认证机构(CA)申请证书,也可以自己做CA,由自己来颁发证书,在本文中将讲述如何自己做证书颁发机构。本文所使用的CA软件为Openssl。Openssl用来产生CA证书、证书签名并生成浏览器可导入的PKCS#12格式个人证书。你可以在Openssl的官方网站http://www.openssl.org下载最新版的Openssl,本文使用的是 Openssl 0.9.7d。

从Openssl的官方网站下载并安装了Openssl之后,设置系统环境变量Path指向Openssl的bin目录,下面开始创建CA根证书:

建立工作目录:

mkdir ca 
cd ca 

生成ca私钥:

openssl dsaparam -out dsaparam 1024 
openssl gendsa -out dsakey dsaparam

生成ca待签名证书:

openssl req -new -out ca-req.csr -key dsakey 

用CA私钥进行自签名,得到自签名的CA根证书:

 openssl x509 -req -in ca-req.csr -out ca-cert.cer -signkey dsakey –days 365

28.2.2.3. 生成服务器端证书

服务器端证书用来向客户端证明服务器的身份,也就是说在SSL协议握手的时候,服务器发给客户端的证书。生成服务器证书时用到了JDK的密钥管理工具Keytool,本文采用的jdk是sun jdk1.5.0。可以在Sun公司的网站http://java.sun.com下载jdk1.5.0。

建立工作目录:

cd .. 
mkdir server 
cd server 

生成服务器私钥对及自签名证书,并且保存在密钥库mykeystore中:

keytool -genkey -alias myserver -keyalg RSA -keysize 1024
 –keypass keypass -storepass keypass -dname "cn=localhost, ou=dev, o=apusic,
 l=Shenzhen, st=guangdong, c=CN" -keystore mykeystore 

生成服务器待签名证书:

keytool -certreq -alias myserver -sigalg SHA1withRSA -file
 server.csr -keypass keypass -storepass keypass -keystore mykeystore 

请求CA签名服务器待签名证书,得到经CA签名的服务器证书:

openssl x509 -req -in server.csr -out server-cert.cer -CA
 ..\ca\ca-cert.cer -CAkey ..\ca\dsakey -days 365 -set_serial 02 

把CA根证书导入密钥库 mykeystore:

keytool -import -alias caroot -file ..\ca\ca-cert.cer -noprompt
 -keypass keypass -storepass keypass -keystore mykeystore 

把经过CA签名的服务器证书导入密钥库mykeystore:

keytool -import -alias myserver -file server-cert.cer -noprompt
 -keypass keypass -storepass keypass -keystore mykeystore 

把CA根证书导入信任库truststore:

keytool -import -alias caroot -file ..\ca\ca-cert.cer -noprompt 
-keypass keypass -storepass keypass -keystore truststore

28.2.2.4. 颁发并发布个人证书

个人证书用来向服务器证明个人的身份,也就是说在SSL协议握手的时候,客户端发给服务器端的证书。同时个人证书中包含个人信息如用户名等,如果需要,这个用户名将作为登录服务器的用户名。

建立工作目录:

cd .. 
mkdir client 
cd client 

生成客户端私钥:

openssl genrsa -out clientkey 1024 

生成客户端待签名证书:

openssl req -new -out client.csr -key clientkey 

请求CA签名客户端待签名证书,得到经CA签名的客户端证书:

openssl x509 -req -in client.csr -out client.cer -CA
 ..\ca\ca-cert.cer -CAkey ..\ca\dsakey -days 365 -set_serial 02 

生成客户端的个人证书client.p12:

openssl pkcs12 -export -clcerts -in client.cer -inkey clientkey
 -out client.p12 

CA根证书导入客户端:

在这里CA的根证书用来在SSL握手时验证服务器发给客户端浏览器的证书。如果没有此证书,浏览器将无法自动验证服务器证书,因此浏览器将弹出确认信息,让用户来确认是否信任服务器证书。 在客户端的IE中使用"工具 -> Internet选项 -> 内容 -> 证书 -> 导入"把我们生成的CA根证书ca\ca-cert.cer导入,使其成为用户信任的CA。

客户端个人证书导入客户端:

在客户端的IE中使用"工具 -> Internet选项 -> 内容 -> 证书 -> 导入"把我们生成的CA根证书client.p12导入,使其成为用户信任的CA。

28.2.2.5. 配置服务器允许双向认证

Apusic应用服务器默认配置下不支持双向认证,要支持SSL双向认证,需要对配置作如下修改:

修改Muxer服务:

如果采用密钥库文件的方式,示例配置如下:

<SERVICE
    CLASS="com.apusic.net.Muxer"
    >
    <ATTRIBUTE NAME="Port" VALUE="6888"/>
    <ATTRIBUTE NAME="Backlog" VALUE="50"/>
    <ATTRIBUTE NAME="Timeout" VALUE="300"/>
    <ATTRIBUTE NAME="MaxWaitingClients" VALUE="500"/>
    <ATTRIBUTE NAME="WaitingClientTimeout" VALUE="5"/>
    <ATTRIBUTE NAME="SSLEnabled" VALUE="True"/>
    <ATTRIBUTE NAME="SecurePort" VALUE="6889"/>
    <ATTRIBUTE NAME="MutualAuthPort" VALUE="6887"/>
    <ATTRIBUTE NAME="NeedClientAuth" VALUE="True"/>
    <ATTRIBUTE NAME="KeyStore" VALUE="config/keystore"/>
    <ATTRIBUTE NAME="KeyPassword" VALUE="keypass"/>
    <ATTRIBUTE NAME="TrustStore" VALUE="config/truststore"/>
    <ATTRIBUTE NAME="TrustStorePassword" VALUE="keypass"/>
    <ATTRIBUTE NAME="TrustStoreType" VALUE="JKS"/>
</SERVICE>

如果采用证书文件的方式,示例配置如下:

<SERVICE
    CLASS="com.apusic.net.Muxer"
    >
    <ATTRIBUTE NAME="Port" VALUE="6888"/>
    <ATTRIBUTE NAME="Backlog" VALUE="50"/>
    <ATTRIBUTE NAME="Timeout" VALUE="300"/>
    <ATTRIBUTE NAME="MaxWaitingClients" VALUE="500"/>
    <ATTRIBUTE NAME="WaitingClientTimeout" VALUE="5"/>
    <ATTRIBUTE NAME="SSLEnabled" VALUE="True"/>
    <ATTRIBUTE NAME="SecurePort" VALUE="6889"/>
    <ATTRIBUTE NAME="MutualAuthPort" VALUE="6887"/>
    <ATTRIBUTE NAME="NeedClientAuth" VALUE="True"/>
    <ATTRIBUTE NAME="ServerCertificateKey" VALUE="config/192.168.6.191.key"/>
    <ATTRIBUTE NAME="ServerCertificateChain" VALUE="config/192.168.6.191.cer;config/serverca.cer"/>
    <ATTRIBUTE NAME="TrustCertificates" VALUE="config/clientrootca.cer"/>
</SERVICE>

28.2.2.6. 测试双向认证

访问应用,如果前面的操作都正确的话,应该可以看到Apusic的欢迎页面。同时状态栏上的小锁处于闭合状态,且证书为有效状态,表示您已经成功地与服务器建立了要求客户端验证的SSL安全连接。