Tomcat的HTTPS配置详解

HTTPS原理详解:[url]http://blog.csdn.net/tenfyguo/article/details/5802682[/url]
[url]http://blog.csdn.net/sean_cd/article/details/6966130[/url]
[url]http://www.codeceo.com/article/https-worker.html[/url]
[url]http://hittyt.iteye.com/blog/1618497[/url]
对称加密与非对称加密:[url]http://www.cnblogs.com/jfzhu/p/4020928.html[/url]
几种加密算法的测试,包括对称加密和非对称加密:[url]http://www.cnblogs.com/cnblogs-lin/archive/2012/10/18/2728996.html[/url]
SSL协议详解:[url]http://kb.cnblogs.com/page/162080/[/url]
SSL与TLS的区别以及介绍:[url]http://kb.cnblogs.com/page/197396/[/url]
web.xml中和四种认证类型 :[url]http://blog.csdn.net/lisheng19870305/article/details/40819481[/url]
tomcat提供安全机制-security-constraint:[url]http://czh.iteye.com/blog/740138[/url]
Tomcat提供的安全机制:[url]http://blog.csdn.net/doupei2006/article/details/11602247[/url]
HTTP 验证 Tomcat中进行基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication) :
[url] http://blog.csdn.net/renminzdb/article/details/42422141[/url]
完美配置Tomcat的HTTPS :[url]http://blog.csdn.net/huaishuming/article/details/8965597[/url]
配置Tomcat使用https协议(配置SSL协议) :[url]http://blog.csdn.net/jimmy609/article/details/18557955[/url]
配置Tomcat使用https协议:[url]http://www.cnblogs.com/wanghaoyuhappy/p/5267702.html[/url]
Realm 配置:[url]http://wiki.jikexueyuan.com/project/tomcat/realms-aaa.html[/url]

修改hosts文件
进入C:\Windows\System32\drivers\etc\文件夹下
修改hosts文件添加以下内容

127.0.0.1  www.donald.com


保存.
这个配置的域名,后面我们生成keystore的时候,要用到,查看能不能ping通
C:\Users\donald>ping www.donald.com

正在 Ping www.donald.com [127.0.0.1] 具有 32 字节的数据:
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64

127.0.0.1 的 Ping 统计信息:
数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms


C:\Users\donald>java -version
java version "1.7.0_17"
Java(TM) SE Runtime Environment (build 1.7.0_17-b02)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)


我的java版本是:1.7.0_17

进入dos环境下,生成keystore,和crt文件,具体如下:
用java keytool工具,生成keystore文件

C:\Users\donald>keytool
密钥和证书管理工具
命令:
-certreq 生成证书请求
-changealias 更改条目的别名
-delete 删除条目
-exportcert 导出证书
-genkeypair 生成密钥对
-genseckey 生成密钥
-gencert 根据证书请求生成证书
-importcert 导入证书或证书链
-importkeystore 从其他密钥库导入一个或所有条目
-keypasswd 更改条目的密钥口令
-list 列出密钥库中的条目
-printcert 打印证书内容
-printcertreq 打印证书请求的内容
-printcrl 打印 CRL 文件的内容
-storepasswd 更改密钥库的存储口令


使用 "keytool -command_name -help" 获取 command_name 的用法

生成keystore文件命令:
keytool -genkey -alias keyssl -keyalg RSA -keystore F:/keys


C:\Users\donald>keytool -genkey -alias keyssl -keyalg RSA -keystore F:/keys
输入密钥库口令:
再次输入新口令:
它们不匹配。请重试
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]: www.donald.com
您的组织单位名称是什么?
[Unknown]: donald
您的组织名称是什么?
[Unknown]: donald
您所在的城市或区域名称是什么?
[Unknown]: guangzhou
您所在的省/市/自治区名称是什么?
[Unknown]: guangdong
该单位的双字母国家/地区代码是什么?
[Unknown]: CN
CN=www.donald.com, OU=donald, O=donald, L=guangzhou, ST=guangdong, C=CN是否正确?
[否]: Y

输入 的密钥口令
(如果和密钥库口令相同, 按回车):
再次输入新口令:
我的密码是h123456

[img]http://dl2.iteye.com/upload/attachment/0120/8615/23141e10-ae5a-31c4-8de0-b38522c31f55.png[/img]


导出crt文件命令:
keytool -export -file F:/donald.crt -alias keyssl -keystore F:/keys

注意-alias 后的keyssl为F:/keys的别名,跟上面保持一致

C:\Users\donald>keytool -export -file F:/donald.crt -alias keyssl -keystore F:/keys

输入密钥库口令:
存储在文件 中的证书


[img]http://dl2.iteye.com/upload/attachment/0120/8617/a496571a-b9d5-31d5-a64e-15e3b2e4d77a.png[/img]

配置tomcat的conf目录下的server.xml文件,配置文件:
由于我的80端口已经被占用,这里我们用8080,我的tomcat版本是7.0.54
               connectionTimeout="20000"
redirectPort="443" URIEncoding="UTF-8"/>

maxThreads="150" maxHttpHeaderSize="8192"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="SSL"
ciphers="SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA,
TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA"
keystoreFile="F:/keys" keystorePass="h123456"/>

当我们访问web时,使用的是端口为80Connector,然后重定向到443端口,从上的配置
可以看是启用的SSL,scheme为https,客户端的验证状态为false,ssl协议为SSL,
ciphers算法为SSL_RSA_WITH_RC4_128_SHA,...,keystore文件为F:/keys,密码为h123456

SSLEnabled="true"
scheme="https"
clientAuth="false"
sslProtocol="SSL"
ciphers="SSL_RSA_WITH_RC4_128_SHA,..."
keystoreFile="F:/keys"
keystorePass="h123456"

这种配置方式,客户端不需要验证,同时keystorePass为明文;
另外一种配置方式:
参考:http://blog.sina.com.cn/s/blog_64a52f2a0101g35m.html
                 maxThreads="150"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
SSLEnabled="true"
sslProtocol="TLS"
SSLCertificateFile="${catalina.base}/conf/server.cer"
SSLCertificateKeyFile="${catalina.base}/conf/server.key" />


SSLCertificateFile是指证书文件
SSLCertificateKeyFile是指私钥文件,
这两个问价你是如何来的呢?
首先下载openssl工具:http://gnuwin32.sourceforge.net/packages/openssl.htm

解压后除了openssl.exe以外,还有一个bat文件,这个可以帮助我们快速创建证书申请文件。
运行autocsr.bat,按照提示输入信息,之后按任意键确认。你会得到两个文件,
一个server.key,这是私钥文件,还有一个名为certreq.csr的证书请求文件。
如果你要向证书颁发机构申请正式的安全证书,那么就把这个certreq.csr文件发给他们就行了。
他们会给你发来两个cer文件,一个是服务器证书,一个是根证书;如果你只是要使用https,
那么证书自己签署就可以了。

步骤如下:
在命令行下,进入刚才解压的目录,找到openssl.exe所在的目录,执行以下命令
openssl x509 -req -in certreq.csr -out server.cer -signkey server.key -days 3650
现在你将得到一个名为server.cer的证书文件,这两个文件就是我们上面用的。

如果真的向证书颁发机构申请到了正式的安全证书,那么配置还有点不同,如下
                 maxThreads="150"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
SSLEnabled="true"
sslProtocol="TLS"
SSLCertificateFile="conf/server.cer"
SSLCertificateKeyFile="conf/server.key"
SSLCertificateChainFile="conf/intermediate.cer" />


因为证书颁发机构会给两个整数,一个是签署后的服务器证书,还有一个中级CA证书,所以要多一行配置。
可能证书颁发机构只会给你服务器证书也就是server.cer, 中级的CA证书即 intermediate.cer 需要到
证书颁发机构提供的网站中去下载,具体的操作会为证书颁发机构给发的邮箱中会有相关的提示。


web.xml配置如下:
 



BASIC





SSL



/login.do
/register.do
/saveRegist.do
GET
POST


CONFIDENTIAL





unfortune
/*
PUT
DELETE
HEAD
OPTIONS
TRACE
PATCH





login-config配置项:
auth-method:有四种客户端的认证方式BASIC,DIGEST,FORM,CLIENT-CERT认证;BASIC为base64方式,
DIGEST为md5信息摘要方式,FORM为基础自定义表单的认证,你可以指定登录时的验证表单,CLIENT-CERT方式,
客户端要安装数字证书;
ream-name:[url]http://wiki.jikexueyuan.com/project/tomcat/realms-aaa.html[/url]

security-constraint配置项:
web-resource-collection:
web-resource-name:
url-pattern:
http-method:

此元素确定应该保护的资源,所有security-constraint元素都必须包含至少一个web-resource-collection项,
此元素由一个给出任意标识名称的web-resource-name元素、一个确定应该保护URL的url-pattern元素、
一个指出此保护所适用的HTTP命令(GET、POST等,缺省为所有方法)的http-method元素和
一个提供资料的可选description元素组成, 重要的是应该注意到,url-pattern仅适用于直接访问这些资源的客户机,
特别是,它不适合于通过MVC体系结构利用RequestDispatcher来访问的页面,
或者不适合于利用类似jsp:forward的手段来访问的页面;

auth-constraint:
子元素 auth-constraint需要和login-config相配合使用,也可可以被单独使用;
如果没有 auth-constraint子元素,这表明任何身份的用户都可以访问相应的资源,
也就是说,如果security-constraint>中没有auth-constraint子元素的话,配置实际上是不起作用的,
如果加入了 auth-constraint子元素,但是其内容为空,这表示所有身份的用户都被禁止访问相应的资源;

user-data-constraint:
这个可选的元素指出在访问相关资源时使用任何传输层保护,它必须包含一个transport-guarantee子元素
(合法值为NONE、 INTEGRAL或CONFIDENTIAL),并且可选地包含一个description元素,
transport-guarantee为NONE值将 对所用的通讯协议不加限制,
INTEGRAL值表示数据必须以一种防止截取它的人阅读它的方式传送,
虽然原理上(并且在未来的HTTP版本中),在 INTEGRAL和CONFIDENTIAL之间可能会有差别,
但在当前实践中,他们都只是简单地要求用SSL。

启动服务器,访问web,就可以看到效果,如下图:


[img]http://dl2.iteye.com/upload/attachment/0120/8619/0df907e3-76dd-3010-8406-2b9009f03f16.png[/img]


选择信任,并前往www.donald.com即可访问web,
网上很多人说遇到这个问题,不过,我没有遇到,
通常会是一个exception,大概是说APR not available,如果遇到这个异常,
说明你的tomcat没有安装apr支持,apr安装详见:[url]http://www.blogjava.net/yongboy/archive/2009/08/31/293343.html[/url]
之后启动tomcat,问题应该解决了,看起来效果和第一种方式没什么不同。

你可能感兴趣的:(tomcat,Tomcat)