在过去的几天里,我尝试在Ubuntu 10.10上安装一个正常工作的CAS服务器(Jasig CAS)。我安装了Tomcat 6并为SSL端口8443配置了(server.xml):
<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
<Connector port="8443"
maxHttpHeaderSize="8192"
maxThreads="150"
minSpareThreads="25"
disableUploadTimeout="true"
acceptCount="100"
scheme="https"
secure="true"
clientAuth="false"
SSLEnabled="true"
SSLProtocol="SSLv3"
SSLCertificateFile="/etc/ssl/certs/server_cert.pem"
SSLCertificateKeyFile="/etc/ssl/private/server_key.pem"
SSLCACertificateFile="/etc/ssl/certs/ca_cert.pem"
SSLCACertificatePath="/etc/ssl/certs"
SSLPassword="password"
/>
server_cert.pem,server_key.pem是自签名的x509证书。此外,我为Windows测试服务器(apache2 - xampp)创建了一个x509v3证书(两个服务器位于同一个LAN中,IP为10.0.0。*)。这些证书安装在位于java目录中的java密钥库(cacerts)中。由于我总是遇到客户端证书中“替代主题名称”的问题,因此我使用了openssl配置文件的扩展版本来创建它。
apache2 ssl配置文件如下所示:
<IfModule ssl_module>
....
<VirtualHost 10.0.0.2:443>
SSLEngine on
ServerName 10.0.0.2:443
#ServerAlias 10.0.0.2
DocumentRoot c:/xampp/htdocs
SSLProtocol -all +SSLv3
SSLCertificateFile C:/xampp/ssl/certs/powercomputer_cert.pem
SSLCertificateKeyFile C:/xampp/ssl/private/powercomputer_key.pem
SSLCACertificateFile C:/xampp/ssl/certs/ca_cert.pem
</VirtualHost>
...
</IfModule>
SSL连接正在两台服务器上运行(使用IE和firefox进行测试)。
现在是艰巨的任务。我使用了一个名为phpCAS的模块,在php上编程,在windows机器上与CAS服务器进行通信。模块将回调URL发送到CAS服务器,服务器发回代理票等等。
但我无法确保两台服务器之间的有效SSL握手。 openssl -s_client -connect ...对于两个服务器都没有显示任何错误,所以我调试了完整的SSL握手(这里只是相关部分):
...
* ServerHelloDone
* ClientKeyExchange,RSA PreMasterSecret,SSLv3 http-apr-8443-exec-3,WRITE:SSLv3 Handshake,length = 132 SESSION
KEYGEN:PreMaster Secret:0000:03 00 78 96 8F EE D3 4A 2F A8 CC F8 F9 D7 2F CB .. x .... J /...../。 0010:9E 3A 58 66 43 0E D5 49 3C 8A B0 3D 3F 2C 89 A0。:XfC..I&lt; .. =?,.. 0020:BC E2 B2 12 F8 D9 55 73 F2 2C 1F CC 81 80 94 22 ...... Us。,.....“CONNECTION KEYGEN:Client Nonce: 0000:4E D1 94 ED 32 7F FA 72 40 3C 43 C8 05 E2 62 D0 ñ... 2..r @ 91 E2 D0 1C 90 3D 30 DD ..n; W6 ....... = 0。主秘密:0000:EB 25 F0 A2 A3 FF 37 06 BB 79 41 C5 E5 07 1C 64。%.... 7..yA .... d 0010:77 66 A3 37 71 97 63 AF DB A2 79 47 85 E2 9C 74 wf.7q.c ... yG ... t 0020: 5F 14 3D 26 57 E8 AD 9B A1 7C AC 33 00 04 4A E0 _。=&amp; W ...... 3..J。 客户端MAC写密码:0000:C9 20 BF A5 A6 2B C1 DA A8 4E 93 E0 DE 76 06 53。 ... + ... N ... v.S服务器MAC写密码:0000:66 77 5A 3E BD E7 19 55 A4 80 1E E6 8A 9E 2A 5E fwZ&gt; ... U ...... * ^客户端 写密钥:0000:58 D1 29 38 13 D8 83 EF 4F BD 7A 18 C8 35 D7 B4 X.)8 .... O.z..5 ..服务器写密钥:0000:3A 7B 6A 6E 66 E9 E1 42 A4 3C C3 19 D0 7F 21 FF:.jnf..B。&lt; .... !. ......没有用于此密码的IV
http-apr-8443-exec-3,WRITE:SSLv3更改密码规范,长度= 1
* 已完成的verify_data:{71,19,125,80,118,60,64,122,243,112,45,18,254,144,12,143,221,125 ,10,94,15,221,122,21, 90,190,76,224,224,57,67,172,228,75,181,228}
* http-apr-8443-exec-3,WRITE:SSLv3握手,长度= 56 http-apr-8443-exec-3, 阅读:SSLv3警报,长度= 2
http-apr-8443-exec-3,RECV SSLv3警告:致命,bad_record_mac
http-apr-8443-exec-3,名为closeSocket()http-apr-8443-exec-3,
处理异常:javax.net.ssl.SSLException:收到致命警报:
bad_record_mac 2011-11-27 02:39:57,315错误
[org.jasig.cas.util.HttpClient] -
bad_record_mac&GT; javax.net.ssl.SSLException:收到致命警报:
bad_record_mac at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)at at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)at ....
我在过去几天没有找到任何解决方案,我真的不知道是什么问题。顺便说一句,我强迫使用SSLv3。
非常感谢您的任何建议。