多路复用的配置段在配置文件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 |
SecurePort | SSL通讯所使用的端口 | 0~65535间未被占用的端口号 | 6889 |
KeyStore | 保存服务器密钥和证书的密钥库文件 | 相对于域的文件路径 | config/sslserver |
KeyPassword | KeyStore密钥库的管理密码和密钥密码 | 管理密码和密钥密码必须相同 | 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 | 可信密钥库算法 | 字符串类型 | 无 |
CRLReloadCheckInterval | CRL检查间隔 | 整型,单位为秒 | 33 |
LookAheadTimeout | 预读取超时时间 | 整型,单位为秒 | 3 |
KeyStoreType | 密钥库类型 | 字符串类型 | 无 |
KeyManagerFactoryAlgorithm | 密钥库算法 | 字符串类型 | 无 |
SSLProtocol | SSL协议类型,默认为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 |
Apusic应用服务器完全支持SSL协议最新版SSL3.0和TLS1.0协议。本文将详细讲述如何在Apusic应用服务器上配置使用SSL双向认证。
为了在不安全的网络上安全保密的传输关键信息,Netscape公司开发了SSL协议,后来IETF(Internet Engineering Task Force)把它标准化了,并且取名为TLS,目前TLS的版本为1.0,TLS1.0的完整版本请参考rfc2246(www.ietf.org)。
基于TLS协议的通信双方的应用数据是经过加密后传输的,应用数据的加密采用了对称密钥加密方式,通信双方通过TLS握手协议来获得对称密钥。为了不让攻击者偷听、篡改或者伪造消息,通信的双方需要互相认证,来确认对方确实是他所声称的主体。TLS握手协议通过互相发送证书来认证对方,一般来说只需要单向认证,即客户端能确认服务器便可。但是对于对安全性要求很高的应用往往需要双向认证,以获得更高的安全性。下面详细讲述建立自己的认证机构,并且利用它来颁发服务器证书和客户端个人证书,然后配置服务器来使用双向认证。
用户可以向可信的第三方认证机构(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
服务器端证书用来向客户端证明服务器的身份,也就是说在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
个人证书用来向服务器证明个人的身份,也就是说在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。
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>