3eapi/doc/HTTPS配置步骤.xml
2026-03-10 16:40:19 +08:00

215 lines
13 KiB
XML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8"?>
<server-config>
<!--
一、 什么是HTTPS
在说HTTPS之前先说说什么是HTTPHTTP就是我们平时浏览网页时候使用的一种协议。
HTTP协议传输的数据都是未加密的也就是明文的因此使用HTTP协议传输隐私信息非常不安全。
为了保证这些隐私数据能加密传输于是网景公司设计了SSLSecure Sockets Layer
协议用于对HTTP协议传输的数据进行加密从而就诞生了HTTPS。SSL目前的版本是3.0
被IETFInternet Engineering Task Force定义在RFC 6101中
之后IETF对SSL 3.0进行了升级,
于是出现了TLSTransport Layer Security 1.0定义在RFC 2246。
实际上我们现在的HTTPS都是用的TLS协议
但是由于SSL出现的时间比较早并且依旧被现在浏览器所支持因此SSL依然是HTTPS的代名词
但无论是TLS还是SSL都是上个世纪的事情SSL最后一个版本是3.0
今后TLS将会继承SSL优良血统继续为我们进行加密服务。
目前TLS的版本是1.2定义在RFC 5246中暂时还没有被广泛的使用。
二、 Https的工作原理
HTTPS在传输数据之前需要客户端浏览器与服务端网站之间进行一次握手
在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议
更是一件经过艺术家精心设计的艺术品TLS/SSL中使用了非对称加密对称加密以及HASH算法。
握手过程的简单描述如下:
1.浏览器将自己支持的一套加密规则发送给网站。
2.网站从中选出一组加密算法与HASH算法并将自己的身份信息以证书的形式发回给浏览器。
证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
3.获得网站证书之后浏览器要做以下工作:
a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否
与正在访问的地址一致等),如果证书受信任,
则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,
并用证书中提供的公钥加密。
c) 使用约定好的HASH计算握手消息并使用生成的随机数对消息进行加密
最后将之前生成的所有信息发送给网站。
4.网站接收浏览器发来的数据之后要做以下的操作:
a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,
并验证HASH是否与浏览器发来的一致。
b) 使用密码加密一段握手消息,发送给浏览器。
5.浏览器解密并计算握手消息的HASH如果与服务端发来的HASH一致此时握手过程结束
之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。
这里浏览器与网站互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,
并且可以正常的加密解密数据,
为后续真正数据的传输做一次测试。另外HTTPS一般使用的加密与HASH算法如下
非对称加密算法RSADSA/DSS
对称加密算法AESRC43DES
HASH算法MD5SHA1SHA256
其中非对称加密算法用于在握手过程中加密生成的密码,对称加密算法用于对真正
传输的数据进行加密,
而HASH算法用于验证数据的完整性。由于浏览器生成的密码是整个数据加密的关键
因此在传输的时候使用了非对称加密算法对其加密。非对称加密算法会生成公钥和私钥,
公钥只能用于加密数据,因此可以随意传输,而网站的私钥用于对数据进行解密,
所以网站都会非常小心的保管自己的私钥,防止泄漏。
TLS握手过程中如果有任何错误都会使加密连接断开从而阻止了隐私信息的传输。
-->
<!--
工具/原料
利用tomcat服务器配置https双向认证
方法/步骤
1
为服务器生成证书
“运行”控制台,进入%JAVA_HOME%/bin目录使用如下命令进入目录
cd “c:\Program Files\Java\jdk1.6.0_11\bin”
使用keytool为Tomcat生成证书假定目标机器的域名是“localhost”keystore文件
存放在“D:\home\tomcat.keystore”口令为“password”使用如下命令生成
keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\home\tomcat.keystore -validity 36500
(参数简要说明“D:\home\tomcat.keystore”含义是将证书文件的保存路径证书文件名称是tomcat.keystore
-validity 36500”含义是证书有效期36500表示100年默认值是90天 “tomcat”为自定义证书名称)。
在命令行填写必要参数:
A、 输入keystore密码此处需要输入大于6个字符的字符串。
B、 “您的名字与姓氏是什么”这是必填项并且必须是TOMCAT部署主机的域名或者IP[如gbcom.com 或者 10.1.25.251]
就是你将来要在浏览器中输入的访问地址否则浏览器会弹出警告窗口提示用户证书与所在域不匹配。在本地做开发测试时应填入“localhost”。
C、 你的组织单位名称是什么?”、“您的组织名称是什么?”、“您所在城市或区域名称是什么?”、“您所在的州或者省份名称是什么?”、
“该单位的两字母国家代码是什么?”可以按照需要填写也可以不填写直接回车,在系统询问“正确吗?”时,
对照输入信息如果符合要求则使用键盘输入字母“y”否则输入“n”重新填写上面的信息。
D、 输入<tomcat>的主密码这项较为重要会在tomcat配置文件中使用建议输入与keystore的密码一致
设置其它密码也可以,完成上述输入后,直接回车则在你在第二步中定义的位置找到生成的文件。
2
为客户端生成证书
为浏览器生成证书以便让服务器来验证它。为了能将证书顺利导入至IE和Firefox证书格式应该是PKCS12因此使用如下命令生成
keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore D:\home\mykey.p12 mykey为自定义
对应的证书库存放在“D:\home\mykey.p12”客户端的CN可以是任意值。双击mykey.p12文件即可将证书导入至浏览器客户端
3
让服务器信任客户端证书
由于是双向SSL认证服务器必须要信任客户端证书因此必须把客户端证书添加为服务器的信任认证。
由于不能直接将PKCS12格式的证书库导入必须先把客户端证书导出为一个单独的CER文件使用如下命令
keytool -export -alias mykey -keystore D:\home\mykey.p12 -storetype PKCS12 -storepass password -rfc -file D:\home\mykey.cer
(mykey为自定义与客户端定义的mykey要一致password是你设置的密码)。通过以上命令客户端证书就被我们导出到“D:\home\mykey.cer”文件了。
下一步,是将该文件导入到服务器的证书库,添加为一个信任证书使用命令如下:
keytool -import -v -file D:\home\mykey.cer -keystore D:\home\tomcat.keystore
通过list命令查看服务器的证书库可以看到两个证书一个是服务器证书一个是受信任的客户端证书
keytool -list -keystore D:\home\tomcat.keystore (tomcat为你设置服务器端的证书名)。
4
让客户端信任服务器证书
由于是双向SSL认证客户端也要验证服务器证书因此必须把服务器证书添加到浏览的“受信任的根证书颁发机构”。
由于不能直接将keystore格式的证书库导入必须先把服务器证书导出为一个单独的CER文件使用如下命令
keytool -keystore D:\home\tomcat.keystore -export -alias tomcat -file D:\home\tomcat.cer (tomcat为你设置服务器端的证书名)。
通过以上命令服务器证书就被我们导出到“D:\home\tomcat.cer”文件了。双击tomcat.cer文件按照提示安装证书将证书填入到“受信任的根证书颁发机构”。
5
配置Tomcat服务器
打开Tomcat根目录下的/conf/server.xml找到Connector port="8443"配置段,修改为如下:
-->
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxHttpHeaderSize="8192" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true" acceptCount="100"
SSLEnabled="true" maxThreads="150" scheme="https"
secure="true" clientAuth="true" sslProtocol="TLS"
keystoreFile="D:\\home\\tomcat.keystore" keystorePass="123456"
truststoreFile="D:\\home\\tomcat.keystore" truststorePass="123456" />
<!--
tomcat要与生成的服务端证书名一致
属性说明:
clientAuth:设置是否双向验证默认为false设置为true代表双向验证
keystoreFile:服务器证书文件路径
keystorePass:服务器证书密码
truststoreFile:用来验证客户端证书的根证书,此例中就是服务器证书
truststorePass:根证书密码
6
测试
在浏览器中输入:https://localhost:8443/会弹出选择客户端证书界面点击“确定”会进入tomcat主页地址栏后会有“锁”图标
表示本次会话已经通过HTTPS双向验证接下来的会话过程中所传输的信息都已经过SSL信息加密。
-->
<!-- 以下为扩展 -->
<!-- 第四步:配置tomcat的server.xml文件[1]redirectPort端口号改为443 -->
<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="443" useBodyEncodingForURI="true"/>
<!-- [2]SSL HTTP/1.1 Connector定义的地方修改端口号为443 -->
<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol"
minSpareThreads="5" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="C:/sdust.keystore" keystorePass="123456"
clientAuth="false" sslProtocol="TLS"/>
<!-- 属性说明clientAuth:设置是否双向验证默认为false设置为true代表双向验证
keystoreFile:服务器证书文件路径keystorePass:服务器证书密码truststoreFile:用来验证客户端证书的根证书,
此例中就是服务器证书truststorePass:根证书密码 -->
<!-- [3] AJP 1.3 Connector定义的地方修改redirectPort为443 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="443"/>
<!-- 第五步 重新启动Tomcat就可以了。
附加内容若要使得应用只能通过https的方式访问在该项目的web.xml文件中加入如下代码 -->
<login-config>
<!-- Authorization setting for SSL -->
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Client Cert Users-only Area</realm-name>
</login-config>
<security-constraint>
<!-- Authorization setting for SSL -->
<web-resource-collection>
<web-resource-name>SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<!--Require HTTPS for everything except /img (favicon) and /css.-->
<security-constraint>
<web-resource-collection>
<web-resource-name>HTTPSOrHTTP</web-resource-name>
<url-pattern>*.ico</url-pattern>
<url-pattern>/img/*</url-pattern>
<url-pattern>/css/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<!-- 测试 :在浏览器中输入:https://localhost:8443/会弹出选择客户端证书界面点击“确定”会进入tomcat主页
地址栏后会有“锁”图标表示本次会话已经通过HTTPS双向验证接下来的会话过程中所传输的信息都已经过SSL信息加密。
可能存在的问题:
Eclipse中启动tomcat7.0本地tomcat配置文件被eclipse恢复。
问题是这样的在eclipse的servers配置项里将tomcat的启动配置为了use tomcat location
但是每次在eclipse里publish项目都会把本地G:\tomcate7.0\apache-tomcat-7.0.29\conf下的配置文件
tomcat-user.xml添加了用户等信息给重置也就是里面添加的内容被清空了回复到原来的样子
问题解决方案:
你eclipse工程列表中应该 还有个 Servers 工程下面会有Tomcat7的配置文件你把里面的对应配置文件改了。
每次是用这个文件来覆盖,tomcat下面的文件的。
特定的目录实现https访问
解决方案:
在web.xml文件中配置相应的路径
-->
<security-constraint>
<!-- Authorization setting for SSL -->
<web-resource-collection>
<web-resource-name>SSL</web-resource-name>
<url-pattern>/login.html</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
</server-config>