这几天要在linux环境下为web application配置通过ssl连接到ldap服务器,因为不了解SSL,操作的时候盲人摸象,相关知识越看越多,现在终于搞定,总结一下,不枉学习一遭。
公钥系统/数字签名/数字证书工作原理
- 加密解密用同一密钥的算法称为对称加密算法,加解密使用不同的密钥为非对称加密算法。公钥加密属于后者。
- 证书是一个把公钥与一个名称绑定的标准方式,证书有以下内容,发行者名称,被发给证书的实体,主题的公钥,时间戳。
- 协议过程:
甲--》乙:你好
乙--》甲:我是乙,乙的证书
甲--》乙:请证明
乙--》甲:甲,我是乙 {摘要[甲,我是乙]}乙的私钥
甲--》乙:你好,乙,这是密钥 {秘密} 乙的公钥
乙--》甲:{一些信息,Message authentication code} 密钥
作为java应用程序,要访问ssl连接必须由java的keystore来管理公钥证书,这里要用到keytool对证书进行操作,导入,导出,删除,查看等。具体的例子如下:
keytool -import -alias ldapca -trustcacerts -file key.crt -keystore /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/security/cacerts
keytool -delete -alias ldapca -keystore /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/security/cacerts -storepass changeit
keytool -list -keystore /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/security/cacerts -storepass changeit
导入证书后可以执行以下jar文件试试是否生效,如果提示找不到证书的话,需要传入jvm参数指明keystore的位置, 如下:
java -jar -Djavax.net.ssl.trustStore=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/security/cacerts -Djavax.net.ssl.keyStorePassword=changeit testAD.jar
作为tomcat在运行web application的时候,如果提示找不到证书,也需要指明keystore的具体位置,主要是修改tomcat的启动参数,要在conf目录下找tomcat配置文件,linux下tomcat5的配置文件具体是在/etc/tomcat5/tomcat5.conf里, 添加如下参数:
JAVA_OPTS="-Djavax.net.ssl.trustStore=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/security/cacerts -Djavax.net.ssl.keyStorePassword=changeit"