TOMCAT、JBOSS HTTPS应用配置方法
SSL
或者SecureSocket Layer,是一种允许web浏览器和web服务器通过一个安全的连接进行交流的技术。这意味着将被发送的数据在一端被翻译成密码,传送出去,然后在另一端解开密码,再进行处理。这是一个双向的过程,也就是浏览器和服务器都需要在发送数据之前对它们进行加密。
SSL协定的另一个重要方面是认证(Authentication)。这就是说,在你开始试图通过一个安全连接与一个web服务器交流的时候,这个服务器会要求你的浏览器出示一组证件,通过“鉴定”的方式来证明这就是你所声明的网站。
在某些情况下,服务器还会要求你的web浏览器的认证书,证明你就是你所说的那个人。这就是所知的“客户认证”,尽管实际情况中,更多地用在商务-对-商务(B2B)交易,而不是对个人用户。
但大多数有SSL功能的web服务器不要求客户认证(Client Authentication)。
证书
为了能实施SSL,一个web服务器对每个接受安全连接的外部接口(IP 地址)必须要有相应的证书(Certificate)。关于这个设计的理论是一个服务器必须提供某种合理的保证以证明这个服务器的主人就是你所认为的那个人。这个证书要陈述与这个网站相关联的公司,以及这个网站的所有者或系统管理员的一些基本联系信息。
这个证书由所有人以密码方式签字,其他人非常难伪造。对于进行电子商务(e-commerce)的网站,或其他身份认证至关重要的任何商业交易,认证书要向大家所熟知的认证权威(Certificate Authority (CA))如VeriSign或Thawte来购买。这样的证书可用电子技术证明属实。实际上,认证权威单位会担保它发出的认证书的真实性,如果你信任发出认证书的认证权威单位的话,你就可以相信这个认证书是有效的。
Java 生成证书
在许多情况下,认证并不是真正使人担忧的事。系统管理员或许只想要保证被服务器传送和接收的数据是秘密的,不会被连接线上的偷窃者盗窃到。庆幸的是,Java提供相对简单的被称为keytool的命令行工具,可以简单地产生“自己签名”的证书。自己签名的证书只是用户产生的证书,没有正式在大家所熟知的认证权威那里注册过,因此不能确保它的真实性。但却能保证数据传输的安全性。
keytool生产非签发证书
keytool -genkey -aliastomcat -keyalg RSA -keystore d:\tomcat.keystore
在此命令中,keytool是JDK自带的产生证书的工具。把RSA运算法则作为主要安全运算法则,这保证了与其它服务器和组件的兼容性。
这个命令会在用户的d:\tomcat.keystore产生一个叫做"tomcat.keystore" 的新文件。你会被要求出示关于这个认证书的一般性信息,如公司,联系人名称,等等。这些信息会显示给那些试图访问你程序里安全网页的用户,以确保这里提供的信息与他们期望的相对应。你会被要求出示密钥(key)密码,也就是这个认证书所特有的密码(与其它的储存在同一个keystore文件里的认证书不同)。你必须在这里使用与keystore密码相同的密码。(目前,keytool会提示你按ENTER键会自动帮你做这些)。
如果一切顺利,你现在就拥有了一个可以被你的服务器使用的有认证书的keystore文件。
申请签发证书
自己生产并签名的证书相对用户使不可信的,也是不安全的,所以一般我们需要向证书发放机构去购买证书,或者获取免费证书,下面是正式的申请流程和在tomcat中的配置,jboss或者apache请参阅相关配置。
1) 生成私钥和公钥对(Keystore) Create a Keystore
keytool -genkey -keyalg rsa -keystore <keystore_filename> -alias<alias_name>
Keytool 会提示您输入私钥密码、您的姓名(Your name,填单位网址)、您的部门名称、单位名称、所在城市、所在省份和国家缩写(中国填:CN,其他国家填其缩写),单位名称一定要与证明文件上的名称一致,部门名称(OU)可以不填。除国家缩写必须填CN外,其余都可以是英文或中文。请一定要保存好您的私钥和私钥密码。WoTrust不会要求您提供私钥文件!
(2) 生成证书请求文件(CSR) Generate a CSR
keytool –certreq –file certreq.csr –keystore <keystore_filename> -alias<alias_name>
请把生成的certreq.csr文件复制和粘贴到Thawte证书在线申请页面的CSR文本框中,或直接发给WoTrust,请等待1-2个工作日后颁发证书。
(3) 导入签名证书 Import Thawte Codesigning Certificate
一旦Thawte验证了您的真实身份,将会颁发证书给您。您需要到Thawte网站下载您的证书,请选择 PKCS #7 格式证书(PKCS #7 Certificate Chain),此证书格式含有您的证书和根证书链,Keytool要求此格式证书 ,请把证书保存到您的电脑中。
请使用如下命令导入您的证书到keystore中,这里假设您的证书名称为:cert.cer,请同时指明详细路径,一旦成功导入证书,请及时备份您的keystore文件:
c:\jdk1.5\bin\keytool–import –trustcacerts –keystore <keystore_filename> -alias<alias_name> -file cert.cer
tomcat 和jboss配置
不管你用的是keytool生产的非正式证书还是申请的正式证书,tomcat和jboss的配置都是一样的。
Tomcat配置
去掉$CATALINA_HOME/conf/server.xml这个文件中这段代码的注释,红色部分为添加部分。请先copy tomcat.keystore文件到tomcat主目录。
< -- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25"maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="tomcat.keystore" keystorePass="123456"
keystoreType="jks"/>
Connector元素本身,其默认形式是被注释掉的(commented out),所以需要把它周围的注释标志删除掉。然后,可以根据需要客户化(自己设置)特定的属性。一般需要增加一下keystoreFile和keystorePass两个属性,指定你存放证书的路径(如:keystoreFile="C:/.keystore")和刚才设置的密码(如:keystorePass="123456")。在完成这些配置更改后,必须象重新启动Tomcat,然后你就可以通过SSL访问Tomcat支持的任何web应用程序。只不过指令需要像下面这样:
JBOSS配置
1)把keystore文件拷贝到jboss安装目录\server\default\conf下
2)和tomca类似,找到jboss安装目录\server\default\deploy\jboss-web.deployer\server.xml文件
https配置已经有了,不过被注释掉了,按如下配置即可
去掉注释符号<!-- 和 -->
<Connectorport="8443" address="${jboss.bind.address}"
maxThreads="100" strategy="ms"maxHttpHeaderSize="8192"
emptySessionPath="true"
scheme="https" secure="true" clientAuth="false"
keystoreFile="${jboss.server.home.dir}/conf/tomcat.keystore"
keystorePass="123456" sslProtocol = "TLS" />