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

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中配置https的总结

    ### 在Tomcat中配置HTTPS详解 #### 一、引言 ...本文将详细介绍如何在Apache Tomcat服务器中配置HTTPS。 #### 二、准备工作 ...在开始配置之前,需要准备以下工具...希望本文能帮助您顺利地完成Tomcat中的HTTPS配置工作。

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

    Spring Boot 中 Tomcat、Https 配置以及 Jetty 优化详解 本资源主要介绍了 Spring Boot 中 Tomcat 的配置、Https 配置以及 Jetty 优化策略。通过本资源,您可以了解到如何在 Spring Boot 项目中配置 Tomcat 和 ...

    tomcat8配置

    【Tomcat8配置详解】 Tomcat8是Apache软件基金会的Jakarta项目下的一个开源Web服务器和Servlet容器,它是Java EE应用程序的标准实现。由于MyEclipse10默认可能不支持Tomcat8,因此需要进行手动配置才能顺利运行。...

    nginx_https+tomcat_http配置.docx

    ### Nginx与Tomcat HTTPS至HTTP反向代理配置详解 #### 一、Windows环境下Nginx与Tomcat HTTPS至HTTP反向代理配置 ##### 1. 安装Nginx - **下载Nginx** - 普通版下载地址: [http://nginx.org/en/download.html]...

    tomcat server.xml配置详解

    在深入探讨Tomcat服务器的`server.xml`配置文件之前,我们先简要了解下Tomcat。Apache Tomcat是一个开源的Servlet容器,主要用来运行Java Servlet和JavaServer Pages(JSP)。`server.xml`是Tomcat的核心配置文件,...

    tomcat,https加密方式(jsse.openssl)

    ### Tomcat HTTPS 加密配置详解 #### 一、JSSE(Java Secure Socket Extension)SSL 配置 在本文档中,我们重点介绍了如何利用 JSSE(Java Secure Socket Extension)为 Tomcat 实现 HTTPS 加密。这种方法是通过...

    keytool+tomcat配置HTTPS双向证书认证

    Keytool+Tomcat配置HTTPS双向证书认证 Keytool 是 Java 中的一个命令行工具,用于生成和管理数字证书。Tomcat 是一个流行的 Web 服务器,可以使用 SSL/TLS 加密来保护数据传输。下面是使用 Keytool 生成证书和配置 ...

    Tomcat 配置技巧精华详解分析

    ##### 3.1 AdminWebApplication配置详解 - **配置文件位置**:`admin.xml`应该位于`CATALINA_BASE/webapps/admin.xml`。 - **配置示例**: ```xml &lt;Property name="annotationProcessors"&gt;org.apache....

    tomcat配置详解

    【Tomcat配置详解】 Tomcat是一款广泛使用的开源Java Servlet容器,由Apache软件基金会开发,用于部署和运行Java Web应用程序。它的核心在于实现Servlet和JavaServer Pages(JSP)规范,是许多开发人员首选的轻量级...

    Tomcat安装及配置教程详解.zip

    【标题】:Tomcat安装及配置教程详解 【正文】: Tomcat是Apache软件基金会Jakarta项目中的一个核心项目,是一款开源、免费的Java Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,使得开发者...

    关于tomcat 的ssl配置

    Tomcat SSL 配置详解 Tomcat 是一个流行的 Web 服务器软件,它支持 SSL/TLS 加密协议,以确保数据传输的安全性。在本文中,我们将详细介绍 Tomcat 的 SSL 配置步骤和过程。 一、生成密钥对 在 Tomcat 中,需要...

    tomcat 环境配置及问题处理

    ### Tomcat环境配置详解及问题处理 #### 一、Tomcat简介 Apache Tomcat是一款开源的Servlet容器,它能够提供对Servlet和JavaServer Pages技术的支持,并且可以作为HTTP Web服务器来使用。通常用于开发和部署Web...

    tomcat配置https说明文档

    ### Tomcat配置HTTPS详解 #### 一、生成服务器证书 为了确保Tomcat服务器能够支持HTTPS协议,首先需要为服务器生成一个数字证书。这一步非常重要,因为它涉及到数据加密和身份验证等安全机制。 ##### 1.1 生成...

    Tomcat服务器配置PDF

    **Tomcat服务器配置详解** Tomcat是一款开源的Java Servlet容器,它是Apache软件基金会下的Jakarta项目的一部分,主要用于运行Java Web应用程序。本教程将深入探讨如何配置Tomcat服务器,以实现高效、安全且稳定的...

    Tomcat与JavaWeb开发技术详解-随书源码

    5. **安全性**:Tomcat提供了基于角色的安全性管理,可以通过配置用户、角色和权限来限制对Web资源的访问。 **JavaWeb开发** JavaWeb开发涉及的技术栈广泛,主要包括: 1. **Servlet**:Servlet是Java平台上的...

    java基础环境及tomcat的配置.doc

    Java 基础环境及 Tomcat 配置详解 Java 是一种流行的高级编程语言,广泛应用于 Android 应用开发、Web 开发、企业软件开发等领域。为了搭建 Java 基础环境,需要配置 JDK(Java Development Kit)和 Tomcat 服务器...

Global site tag (gtag.js) - Google Analytics