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

[经验分享] tomcat https 配置

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2017-12-26 09:14:13 | 显示全部楼层 |阅读模式
  以前基本上笔者对于安全性考虑的并不多,最近因为saas平台要开始逐渐推广,所以需要开始逐渐加强xss/crsf/https等措施以避免潜在的安全性风险。本文简单的记录下tomcat下https的配置。
  注意:在实际的系统中,很少会直接在tomcat上配置https对外提供服务,一般是通过在nginx上配置https接入,转发给内部tomcat服务器时转换为http。具体可参考http://www.cnblogs.com/zhjh256/p/6262620.html。
  PS:获取证书的方式有很多种,去三方网站申请(免费版和收费版)或自己生成(jdk自带的keytool工具,使用jdk keytool生成的数字证书是自签名的。自签名就是指证书只能保证自己是完整且没有经过非法修改,但是无法保证这个证书是属于谁的。为了对自签名证书进行认证,需要每个客户端和服务端都交换自己自签名的私有证书,对于一个大型网站或者应用服务器,这种工作量是非常大的。
  各浏览器以及版本、各类库比如openssl、jsse等对TLS的支持情况可参考https://en.wikipedia.org/wiki/Transport_Layer_Security,其中有非常完整的说明以及各版本的支持情况。当前openssl的发行版本包括如下:

  • 0.9.x
  • 1.0.0
  • 1.0.1
  • 1.0.2
  • 1.1.0
  • fips
  可从openssl官方网站下载。
  提及TLS,还设计一个关键的概念startTls,因为在SSL开始的握手阶段,仍然是采用明文进行交互的,这使得在初始阶段可能发生被截获的情况,为了避免这种风险,产生了startTls,具体可见https://wiki.inspircd.org/STARTTLS_Documentation,https://en.wikipedia.org/wiki/Opportunistic_TLS。
  基于自签名的SSL双向认证,只要客户端或者服务端修改了密钥和证书,就需要重新进行签名和证书交换,这种调试和维护工作量是非常大的。因此,在实际的商用系统中往往会使用第三方CA证书颁发机构进行签名和验证。我们的浏览器就保存了几个常用的CA_ROOT。每次连接到网站时只要这个网站的证书是经过这些CA_ROOT签名过的。就可以通过验证了。
  )。当然我们自己测试的时候,肯定是要用免费的。服务器类型:Apache,IIS,Nginx,Tomcat, other Server。就是说,ssl证书时按照这几种类型生成对应不同文件的,当然配置也不一样。
  比如配置tomcat的https,免费的一般建议直接使用java安装时自带的keytool即可,如果是nginx,则需要使用openssl生成(如果是三方CA颁发的,直接在对应的网站上操作生成即可)。
  建议把相关证书和key放在$TOMCAT_HOME/security下,便于统一管理。
  建议命名规范为:
  ca-key.pem 一般来说是CA证书的rsa私钥文件
  ca.pem   可信Certificate Authority (CA)证书,通常内部通信的话,可以自签名,通过openssl req -new -x509生成。
  client-cert.pem 客户端公钥证书(一般HTTPS不用,浏览器会自动管理,但是自行开发的客户端就需要了,比如java rpc,jdbc客户端)
  client-key.pem 客户端私钥(一般HTTPS不用,浏览器会自动管理,但是自行开发的客户端就需要了,比如java rpc,jdbc客户端)
  server-cert.pem 服务器公钥证书,必须由拥有它的CA认证
  server-key.pem 服务器私钥
  D:\Java\jdk1.8.0_102\bin>keytool
  密钥和证书管理工具
  命令:
  -certreq            生成证书请求
  -changealias        更改条目的别名
  -delete             删除条目
  -exportcert         导出证书
  -genkeypair         生成密钥对
  -genseckey          生成密钥
  -gencert            根据证书请求生成证书
  -importcert         导入证书或证书链
  -importpass         导入口令
  -importkeystore     从其他密钥库导入一个或所有条目
  -keypasswd          更改条目的密钥口令
  -list               列出密钥库中的条目
  -printcert          打印证书内容
  -printcertreq       打印证书请求的内容
  -printcrl           打印 CRL 文件的内容
  -storepasswd        更改密钥库的存储口令
  使用 "keytool -command_name -help" 获取 command_name 的用法
  D:\Java\jdk1.8.0_102\bin>keytool -genkey -alias tomcat -keyalg RSA
  输入密钥库口令:
  再次输入新口令:
  您的名字与姓氏是什么?
[Unknown]: ldtrader.com  #这里的名称很重要,建议使用官网的地址

  您的组织单位名称是什么?
[Unknown]:  ldtrader

  您的组织名称是什么?
[Unknown]:  ldtrader

  您所在的城市或区域名称是什么?
[Unknown]:  hz

  您所在的省/市/自治区名称是什么?
[Unknown]:  zj

  该单位的双字母国家/地区代码是什么?
[Unknown]:  cn

  CN=ldtrader.com, OU=ldtrader, O=ldtrader, L=hz, ST=zj, C=cn是否正确?
[否]:  y

  输入 <tomcat> 的密钥口令
  (如果和密钥库口令相同, 按回车):
  完毕后会在当前目录下,会在$HOME下(比如C:\Users\dell)产生一个:.keystore文件,将它拷贝到tomcat的bin目录下。
  D:\apache-tomcat-7.0.69\bin>keytool -selfcert -alias tomcat -keystore .keystore
  输入密钥库口令:
  D:\apache-tomcat-7.0.69\bin>keytool -export -alias tomcat -keystore .keystore -storepass tomcat -rfc -file tomcat.cer
  存储在文件 <tomcat.cer> 中的证书
  此时会在D:\apache-tomcat-7.0.69\bin>下生成tomcat.cer证书文件。将该文件发给使用者,让他们安装该证书,并将证书安装在“受信任的根证书颁发机构”区域中。
  1.2 配置tomcat
  打开$CATALINA_BASE/conf/server.xml 找到“SSL HTTP/1.1 Connector” 那一块,取消注释并将它改成:
  <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
  maxThreads="150" scheme="https" secure="true"
  keystoreFile="bin/.keystore" keystorePass="tomcat"
  clientAuth="false" sslProtocol="TLS" />
  修改windows机器的host文件,增加一行:
  127.0.0.1 ldtrader.com
  接下来重启tomcat,用https://ldtrader.com:8443/访问网站验证一下就行了。
  可参考链接http://jingyan.baidu.com/article/ce43664919d1383773afd39f.html,进行chrome证书导入后就可直接访问,不会再提示下列信息:
DSC0000.png

  keytool参考手册https://docs.oracle.com/javase/8/docs/technotes/tools/windows/keytool.html
  通常来说配置https算是web安全性中最省事的环节,更重要的是,应用中对于session/cookie/csrf/xss进行保护。比如:
  对于cookie来说,需要进行HttpOnly和Secure保护,如下:
  cookie.setHttpOnly(true);
  cookie.setSecure(true);
  启用HSTS,通常在http服务器层进行设置,"Strict-Transport-Security", "max-age=31536000; includeSubDomains"
  等等。

运维网声明 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-428132-1-1.html 上篇帖子: Tomcat 日志清除(含扩展AccessLogValve) 下篇帖子: tomcat -ROOT 与webapps 的关系,关于部署的一些问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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