zoukankan      html  css  js  c++  java
  • tomcat https 配置

      以前基本上笔者对于安全性考虑的并不多,最近因为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的发行版本包括如下:

      可从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:Javajdk1.8.0_102in>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:Javajdk1.8.0_102in>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:Usersdell)产生一个:.keystore文件,将它拷贝到tomcat的bin目录下。

    D:apache-tomcat-7.0.69in>keytool -selfcert -alias tomcat -keystore .keystore
    输入密钥库口令:

    D:apache-tomcat-7.0.69in>keytool -export -alias tomcat -keystore .keystore -storepass tomcat -rfc -file tomcat.cer
    存储在文件 <tomcat.cer> 中的证书

    此时会在D:apache-tomcat-7.0.69in>下生成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证书导入后就可直接访问,不会再提示下列信息:

     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"

    等等。

  • 相关阅读:
    Quartz_理解2
    Quartz_理解1
    Java监控常用工具 .
    DB2函数大全
    cvs上传复制项目
    PLSQL DEVELOPER 使用的一些技巧【转】
    webservice_模拟报文测试
    Myeclipse插件将wsdl生成java客户端代码
    利用 UltraEdit 重新排版 XML 结构数据
    uoj164. 【清华集训2015】V 统计
  • 原文地址:https://www.cnblogs.com/zhjh256/p/6262575.html
Copyright © 2011-2022 走看看