`
Donald_Draper
  • 浏览: 950931 次
社区版块
存档分类
最新评论

Tomcat的HTTPS配置详解

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

修改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

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




导出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

输入密钥库口令:
存储在文件 <F:/donald.crt> 中的证书




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

<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
            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
<Connector port="443" maxHttpHeaderSize="8192"
                 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的证书文件,这两个文件就是我们上面用的。

如果真的向证书颁发机构申请到了正式的安全证书,那么配置还有点不同,如下
<Connector port="443" maxHttpHeaderSize="8192"
                 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配置如下:
     
 <!-- 配置应用安全 -->
	<login-config> 
		<!-- Authorization setting for SSL --> 
		<!-- <auth-method>CLIENT-CERT</auth-method> 
		<realm-name>Client Cert Users-only Area</realm-name> 
		<auth-method>BASIC</auth-method>
		 -->
		<auth-method>BASIC</auth-method>
		
	</login-config> 
        <!-- 登录、注册SSL -->
        <security-constraint> 
		<web-resource-collection > 
			<web-resource-name >SSL</web-resource-name>
			<!-- /*代表对所有web资源,使用HTTPS -->
                        <!-- <url-pattern>/*</url-pattern> -->
                        <!-- 仅对以下连接,使用HTTPS -->
			<url-pattern>/login.do</url-pattern> 
			<url-pattern>/register.do</url-pattern> 
			<url-pattern>/saveRegist.do</url-pattern> 
			<http-method>GET</http-method>
			<http-method>POST</http-method>
		</web-resource-collection> 
		<user-data-constraint> 
			<transport-guarantee>CONFIDENTIAL</transport-guarantee> 
		</user-data-constraint> 
	</security-constraint>
	<!-- 禁止不安全的http方法 --> 
	<security-constraint> 
		<web-resource-collection> 
			<web-resource-name>unfortune</web-resource-name> 
			<url-pattern>/*</url-pattern> 
			<http-method>PUT</http-method> 
			<http-method>DELETE</http-method> 
			<http-method>HEAD</http-method> 
			<http-method>OPTIONS</http-method> 
			<http-method>TRACE</http-method> 
			<http-method>PATCH</http-method> 
		</web-resource-collection> 
		<auth-constraint></auth-constraint> 
	</security-constraint> 


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

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,就可以看到效果,如下图:





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

相关推荐

    tomcat集群配置

    NULL 博文链接:https://fengtiejun.iteye.com/blog/1595845

    详解SpringBoot初始教程之Tomcat、Https配置以及Jetty优化

    本篇文章主要介绍了详解SpringBoot初始教程之Tomcat、Https配置以及Jetty优化,具有一定的参考价值,有兴趣的可以了解一下

    https配置详解

    使用jdk自带工具配置https协议。tomcat配置方式。这里使用JDK自带的keytool工具来生成证书(jdk里面bin目录下)

    详解如何给Tomcat配置Https/ssl证书

    主要介绍了详解如何给Tomcat配置Https/ssl证书,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    tomcat使用与调优,nginx

    第⼆部分:Tomcat 服务器核⼼配置详解 第三部分:⼿写实现迷你版 Tomcat 第四部分:Tomcat 源码构建及核⼼流程源码剖析 第五部分:Tomcat 类加载机制剖析 第六部分:Tomcat 对 Https 的⽀持及 Tomcat 性能优化策略 ...

    详解用Tomcat服务器配置https双向认证过程实战

    C:\Windows\system32&gt;keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\tomcat.keystore -validity 36500 输入keystore密码: 再次输入新密码: 您的名字与姓氏是什么? [Unknown]: StoneXing 您的组织...

    Nginx+Tomcat+Https 服务器负载均衡配置实践方案详解

    主要介绍了Nginx+Tomcat+Https 服务器负载均衡配置实践方案的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

    https双向认证证书配置详解

    有的用pem,有的用key所以容易被绕晕所以自己整理了一下 希望对刚接触证书以及需要配置双向认证的人有帮助,内含的ssl双向证书认证,如何为tomcat配置https单、双向请求认证,以及有关证书配置的详解!整理的可能不是...

    国密SSL浏览器访问国密SSL规范Tomcat服务器的完整方法(附演示DEMO访问方法)

    3. 使用新安装的国密浏览器访问 https://127.0.0.1 地址,浏览器通过GMSSL_ECC_WITH_SM4_CBC_SM3国密密码套件与TOMCAT服务器建立国密SSL规范的单向加密通道,并打开指定网页 以上步骤经过实际测试 感谢大宝CA...

    Linux下Nginx负载均衡多个tomcat配置的方法步骤

    Linux下安装nginx和安装多个tomcat的方法这里不过多介绍,不清楚的可参考: Linux安装nginx: https://www.jb51.net/article/159519.htm ...安装了4个tomcat,并且配置好了各端口号,分别对应8080,8081,8082

    详解tomcat各个端口的作用

    从tomcat配置文件中,我们可以看出,在启动tomcat的时候默认启动了3个端口,分别是8080(8443)、8009、8005。 8080(8443)端口 connectionTimeout=20000 redirectPort=8443&gt; 这个应该是我们最熟悉的一个,平常...

    Windows 下使用 Apache + Tomcat 实现Web集群环境(负载均衡/反向代理)

    下载完成后,将压缩包解压到位,并将多余的 文件包删除掉,接下来就是配置...3、安装配置 Tomcat 集群环境。 具体的详细操作步骤及参数详解请参考: https://blog.csdn.net/hello_world_qwp/article/details/79698334

    详解Nginx配置SSL证书实现Https访问

    首先在硬负载上配置放弃了,然后通过在网上查找资料,发现可以只在Nginx上配置证书,就是说Nginx接入使用Https,而Nginx与Tomcat之间使用Http进行衔接,这样就游了一个整体思路。 关于SSL证书 关于SSL证书这里简单...

    nginx+tomcat实现Windows系统下的负载均衡搭建教程

    刚入行没多久就听过‘负载均衡’的大名,到现在因为工作接触的少,所以没什么太多的认识。但自己又对其非常的好奇,所以前两天通过查资料,在...下载地址:https://tomcat.apache.org/download-80.cgi (这是8.0版本

    apachevc24

    Apache与tomcat的区别,我稍微提一下,Apache是web服务器,而Tomcat是Apache与Java sun公司的产品,Tomcat是java中selvert的容器,所以最大使用区别是,tomcat的java应用程序的服务器,使用tomcat需要搭建java开发...

    详解NGINX访问https跳转到http的解决方法

    网站架构:用户–https—&gt;nginx代理—http—-&gt;tomcat/nginx+php nginx待遇发给后端的请求是http协议,后端程序跳转获取到的协议是http,返回一个redirect(http header中带Location://www.jb51.net/aaa.html),...

    Nginx高性能WEB服务器视频.zip

    10 Nginx Rewrite规则详解一.ts 11 构建Nginx均衡LAMP高性能服务器.ts 12 Nginx日志分析及脚本编写.ts 13 Nginx日志切割案例讲解.ts 14 Nginx均衡TCP协议服务器案例.ts 15 Nginx防盗链配置案例配置.ts 16 Nginx运维...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动分析 189 5.5.4 tomcat的体系结构 191 5.6 tomcat的管理程序 193 5.6.1 admin web应用程序 193 5.6.2 manager web...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动分析 189 5.5.4 tomcat的体系结构 191 5.6 tomcat的管理程序 193 5.6.1 admin web应用程序 193 5.6.2 manager web...

Global site tag (gtag.js) - Google Analytics