设为首页 收藏本站
查看: 565|回复: 0

[经验分享] Tomcat 下配置Https(SSL)

[复制链接]

尚未签到

发表于 2017-1-22 10:06:39 | 显示全部楼层 |阅读模式
  一、基础知识
  Tomcat 简介
  Tomcat是Apache
Jakarta的子项目之一,作为一个优秀的开源web应用服务器,全面支持jsp1.2以及servlet2.3规范。因其技术先进、性能稳定,而且免
费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的web应用服务器。
  
  https(Secure Hypertext Transfer
Protocol)安全超文本传输协议 简介
  https是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入
SSL层。
  它是由Netscape开发并内置于其浏览器中,旨在达到在开放网络(Internet)上
安全保密地传输信息的目的。
  用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了
Netscape的完全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进
行通信。)SSL使用40
位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。。
  
  SSL (Secure Socket Layer)简介
  为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密
(Encryption)技术,可确保数据在网络上之传输过程中不会被截取与偷听。
  
  
  (附)SSL工作原理
  SSL协议使用不对称加密技术实现会话双方之间信息的安全传递。可以实现信息传递的保密性、
完整性,并且会话双方能鉴别对方身份。不同于常用的http协议,我们在与网站建立SSL安全连接时使用https协议,即采用https://ip:port/
的方式来访问。
  当我们与一个网站建立https连接时,我们的浏览器与Web
Server之间要经过一个握手的过程来完成身份鉴定与密钥交换,从而建立安全连接。具体过程如下:
  1.
用户浏览器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送到服务器。
  2.
服务器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送给浏览器,同时发给浏览器的还有服务器的证书。如果配置服务
器的SSL需要验证用户身份,还要发出请求要求浏览器提供用户证书。
  3. 客户端检查服务器证书,如果检查失败,提示不能建立SSL连接。如果成功,那么继续。

  4. 客户端浏览器为本次会话生成pre-master
secret,并将其用服务器公钥加密后发送给服务器。
  5.
如果服务器要求鉴别客户身份,客户端还要再对另外一些数据签名后并将其与客户端证书一起发送给服务器。
  6.
如果服务器要求鉴别客户身份,则检查签署客户证书的CA是否可信。如果不在信任列表中,结束本次会话。如果检查通过,服务器用自己的私钥解密收到的
pre-master secret,并用它通过某些算法生成本次会话的master secret。
  7. 客户端与服务器均使用此master
secret生成本次会话的会话密钥(对称密钥)。在双方SSL握手结束后传递任何消息均使用此会话密钥。这样做的主要原因是对称加密比非对称加密的运算
量低一个数量级以上,能够显著提高双方会话时的运算速度。
  8.
客户端通知服务器此后发送的消息都使用这个会话密钥进行加密。并通知服务器客户端已经完成本次SSL握手。
  9.
服务器通知客户端此后发送的消息都使用这个会话密钥进行加密。并通知客户端服务器已经完成本次SSL握手。
  10.
本次握手过程结束,会话已经建立。双方使用同一个会话密钥分别对发送以及接受的信息进行加、解密。
  
  二、tomcat实现SSL配置
  第一步 生成KeyStore
  
  keytool -genkey -alias tomcat -keyalg RSA
–keysize 1024 –validity 730 -keystore D:\server.keystore
  生成.keystore文件在 用户目录下
  输入keystore密码: ************
  您的名字与姓氏是什么?
  [Unknown]: localhost
  您的组织单位名称是什么?
  [Unknown]: dept
  您的组织名称是什么?
  [Unknown]: Inc
  您所在的城市或区域名称是什么?
  [Unknown]: bj
  您所在的州或省份名称是什么?
  [Unknown]: bj
  该单位的两字母国家代码是什么
  [Unknown]: CN
  CN=localhost, OU= dept, O= Inc, L=bj,
ST=bj, C=CN 正确吗?
  [否]: Y
  输入的主密码
  (如果和 keystore 密码相同,按回车):*************
  注意: localhost,是网站的域名或者ip,根据实际情况填写,比如 www.baidu.com
  192.168.0.85 
否则会出现证书上的名称无效,或者与站点名称不匹配。
  
  建议:将生成的
server.keystore文件,放到%TOMCAT_HOME%或其子目录中(如:%TOMCAT_HOME%/conf)
  (其实放哪里都一样,只是放到%TOMCAT_HOME%里面会方便一些)
  
  第二步 修改server.xml
  
  修改%TOMCAT_HOME%/conf/server.xml
  去掉下面SSL HTTP那个注释,修改为如下: 
  Xml代码 DSC0000.gif


    <Connector port="8443" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"   
SSLEnabled="true"  
maxThreads="150"  
scheme="https"  
secure="true"  
clientAuth="false"  
sslProtocol="TLS"   
keystoreFile="/conf/server.keystore"  
keystorePass="changeit" />  

 

  <Connector port="8443"
protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"
SSLEnabled="true" maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/conf/server.keystore" keystorePass="changeit" />
  keystoreFile
是server.keystore放置的位置,keystorePass是密码 (默认密码是changeit)
  
  第三步
  重启Tomcat,访问地址https://ip:8443/

  
  
  
  
  
  (附录:)tomcat的配置文件SSL部分详细说明
  配置文件server.xml,SSL部分:
  Xml代码


   <!-- A "Connector" represents an endpoint by which requests are received   
and responses are returned. Documentation at :   
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)   
Java AJP  Connector: /docs/config/ajp.html   
APR (HTTP/AJP) Connector: /docs/apr.html   
Define a non-SSL HTTP/1.1 Connector on port 8080   
-->  
<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="D:/Tomcat/conf/tomcatKey.keystore"  
keystorePass="changeit"  
algorithm="SunX509"  
/>  
 
  <!-- A "Connector" represents an
endpoint by which requests are received         and responses are
returned. Documentation at :         Java HTTP Connector:
/docs/config/http.html (blocking & non-blocking)         Java AJP 
Connector: /docs/config/ajp.html         APR (HTTP/AJP) Connector:
/docs/apr.html         Define a non-SSL HTTP/1.1 Connector on port
8080    --> <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="D:/Tomcat/conf/tomcatKey.keystore" keystorePass="changeit"
algorithm="SunX509" />
  
  属性说明:
  port:     这个port属性(默认值是8443)是
TCP/IP端口数码,Tomcat在其上监听安全连接。你可以把它更改成任何你愿意要的数值(如默认的https通信,数目是443)。不过,在许多操
作系统中,要想在比1024小的端口数码上运行Tomcat,需要特殊的设置(它超出了这个文档资料的范围)。
  
  redirectPort: 如果你在这里更改端口数值,你还必须更改在non-SSL连接
器上的redirectPort 这个属性特定的值。这允许Tomcat自动地redirect那些试图访问有安全限制页面的用户,指明根据
Servlet 2.4 Specification要求,SSL是必需的
  
  clientAuth: 如果你想要Tomcat要求所有的SSL客户在使用这个
socket时出示用户认证书,把这个值设定为 true 。如果你想要Tomcat要求出示用户认证书,但是如果没有认证书也可以,
就把这个值设定为want 。
  
  keystoreFile: 如果你产生的keystore文件不在Tomcat期望的默认
地方(一个叫做.keystore 的文件在Tomcat运行的主目录),就添加这个属性。你可以指定一个绝对路径名称,
或者一个由$CATALINA_BASE环境变量而派生的相对路径名称。
  
  keystorePass: 如果你使用一个不同的keystore(以及认证书)密码,而
不是Tomcat期望的密码 (就是changeit),添加这个元素。
  
  keystoreType: 如果使用一个PKCS12
keystore的话,就添加这个element。 有效的值是JKS 和 PKCS12
  
  sslProtocol: 要在这个socket上被使用的加密/解密协定。如果你在使用
Sun的JVM,我们不提倡更改 这个值。据报道,TLS协定的IBM's 1.4.1 实现与一些通用的浏览器不兼容。 如果是这样,就使用value
SSL
  
  ciphers: 这个socket允许使用的由逗号分隔开的加密密码列单。默认的情况下,
任何可用的密码都允许被使用。
  
  algorithm: 可用的X509算法。默认是Sun的实现( SunX509 )。
对于IBM JVMs,你应该使用值 IbmX509。对于其他卖主,查阅JVM文档资料来 找正确的值。
  
  truststoreFile: 用来验证用户认证书的TrustStore文件。
  
  truststorePass: 访问TrustStore的密码。默认值就是
keystorePass的值。
  
  truststoreType: 如果你在使用与KeyStore不同格式的
TrustStore,添加这个元素。 合法的值是JKS和PKCS12
  
  keyAlias: 如果 keystore 里面有多个
key,你可以为用这个选项为加入的 key 起一个名字。 如果没有指定名字,使用时 keystore 内的第一个 key 将会被使用。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-331933-1-1.html 上篇帖子: 记录一次 tomcat日志配置 下篇帖子: tomcat水平集群例子
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表