zoukankan      html  css  js  c++  java
  • Tomcat配置https加密连接

    配置https安全连接(ssl加密连接)

    https连接需要用到数字证书与数字签名(MD5算法),网站https连接首先需要申请数字证书,配置加密连接器,浏览器安装证书。

    证书运用到RSA技术,RSA加密算法是一种非对称加密算法,服务器保留私钥,对外公开公钥(cer证书)。

    Tomcat秘钥库类型为JKS(Java Key Storage),很容易知道这是 JAVA 的专属格式,利用 JAVA 的一个叫 keytool 的工具可以进行格式转换。一般用于 Tomcat 服务器。

    单向认证

    生成服务端秘钥库

    使用java的工具keytool产生数字证书,tomcat.keystore可以写在需要生成的路径。此句是生成tomcat.keystore(需要设置秘钥库密码),并在tomcat.keystore中生成服务端证书私钥(需要设置私钥密码)。

    keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keystore "tomcat.keystore" -validity 36500   //生成秘钥库,并生成别名为tomcat的私钥(条目类型PrivateKeyEntry)

    参数说明:

    -genkeypair:生成一对非对称密钥;
    -alias:指定密钥对的别名,该别名是公开的;
    -keyalg:指定加密算法,本例中的采用通用的RAS加密算法;
    -keystore:密钥库的路径及名称,不指定的话,默认在操作系统的用户目录下生成一个".keystore"的文件;
    -validity:设置秘钥有效期,单位为天,36500即为100年;

    中间根据提示设置密码(秘钥库密码、服务器证书私钥密码),生成文件.keystore。

    注意:

      1.密钥库的密码至少必须6个字符,可以是纯数字或者字母或者数字和字母的组合等等

      2."名字与姓氏(CN)"应该是输入域名,而不是我们的个人姓名,本机可用localhost,其他的可以不填

    将文件.keystore放到Tomcat服务器的conf目录下(不移动也可以,在xml中配置时写指定路径即可)
    cp tomcat.keystore /usr/local/tomcat/server/conf/

    根据秘钥库生成证书

    这里根据keystore中服务端证书的私钥生成cer的服务端公钥cer证书。需要输入秘钥库密码

    keytool -export -alias tomcat -keystore tomcat.keystore -rfc -file tomcatserver.cer   //根据keystore秘钥库中别名为tomcat的条目(私钥),生成cer证书(公钥)

    生成的服务端公钥证书有效期为上面私钥设置的有效期

    参数说明:

    -alias tomcat    //要处理的条目的别名(秘钥库中的条目)
    -keystore tomcat.keystore   //密钥库名称,为刚才导出的秘钥库
    -rfc    //以 RFC 样式输出
    -file tomcatserver.cer    //输出文件名

    单向认证配置

    在客户端安装tomcatserver.cer到受信任的根证书颁发机构;配置server.xml,clientAuth客户端认证要设置为false。

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" 
    secure="true" clientAuth="false" sslProtocol="TLS" 
    keystoreFile="conf/tomcat.keystore" keystorePass="秘钥库密码"/>

    测试

    查看证书

    IE浏览器 -> Internet选项 -> 内容 ->  证书 -> 受信任的根证书颁发机构,找到上面输入的名字与姓氏(CN)输入的东西。

    打开IE测试,发现localhost的进不去,127.0.0.1的可以进去。因为生成证书时名字与姓氏(CN)输入的127.0.0.1(客户端访问服务器端的IP)。

    其他常用命令

    导入其他的证书到密钥库

    导入后条目类型为trustedCertEntry,配置文件要配置truststoreFile,这个一般用于客户端证书(公钥)的导入。

    只是导入了cer证书的私钥,不含有公钥,要再根据秘钥库中导入的证书alias执行export操作。

    keytool -import -file tomcatclient.cer -storepass  -keystore tomcat.keystore -alias aeolian

    参数说明:

    -file tomcat-client2.cer    //必须,证书文件名称
    -keystore tomcat.keystore    //必须,密钥库名称,创建服务端秘钥库的文件
    -alias aeolian   //推荐写,要导入的证书别名(决定此证书导入到秘钥库中的别名),不写默认为mykey,再次导入会提示别名mykey已存在
    -storepass    //不推荐写,密钥库密码。回车后会提示你输入秘钥库密码

    在密钥库中删除条目

    这里一般也是删除受信任的客户端证书的公钥

    keytool -delete -keystore tomcat.keystore -alias mykey    //删除秘钥库中别名为mykey的条目

    修改秘钥库中证书条目的口令

    keytool -keypasswd -keystore tomcat.keystore -alias mykey  //更改别名为mykey条目的密码,需要输入秘钥库密码

    查看秘钥库内容

    keytool -list -v -keystore tomcat.keystore    //要输入秘钥库密码

    查看证书内容

    keytool -printcert -file tomcatclient.cer

    双向认证

    上面的为服务端证书,在此基础上,双向认证还需要客户端证书。客户端证书是先生成p12的客户端私钥,再根据p12转成cer,把cer(公钥)导入keystore并命名alias。

    生成PKCS12格式的客户端证书

    为客户端生成证书,为了让证书顺利导入IE和Firefox,证书格式应该是PKCS12。要输入客户端证书密码。tomcat-client.p12为客户端私钥。这里也要输入CN,和上面服务器证书的CN一样即可。

    keytool -genkey -v -alias tomcatclientp12 -keyalg RSA -storetype PKCS12 -keystore tomcat-client.p12 -validity 3650

    让服务器信任户端证书

    由于是双向SSL认证,服务器必须要信任客户端证书.由于不能直接将PKCS12直接将PKCS12的格式的证书导入证书库,必须先把客户端证书导出为一个单独的cer文件,然后再把cer文件导入秘钥库。

    keytool -export -alias tomcatclientp12 -keystore tomcat-client.p12 -storetype PKCS12 -storepass P12证书秘钥 -rfc -file tomcat-client-p12.cer  //导出客户端公钥,要输入密码
    keytool -import -v -file tomcat-client-p12.cer -keystore tomcat.keystore -alias tomcatclientpub    //将客户端证书公钥导入到服务器的秘钥库,并为客户端公钥起一个别名

    浏览器安装P12证书

    IE浏览器 -> Internet选项 -> 内容 ->  证书 -> 个人 -> 导入 ->选择tomcat-client.p12,安装完成后个人栏显示即可(p12发现直接安装虽然显示成功但是个人栏里面不显示)。

    配置文件

    修改conf/server.xml文件,修改加密连接器,添加keystoreFile(服务端证书私钥)与keystorePass(客户端证书公钥),把protocol换为HTTP/1.1。clientAuth表示客户端是否认证,双向认证设为true。

    <Connector port="9443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" 
    secure="true"  clientAuth="true" sslProtocol="TLS" 
    keystoreFile="conf/tomcat.keystore" keystorePass="秘钥库密码" 
    truststoreFile="conf/tomcat.keystore" truststorePass="秘钥库密码"/>

    测试

    访问https://localhost:9443/cas/login依然进不去,因为证书CN不为localhost。

    访问https://127.0.0.1:9443/cas/login,首先弹出确认证书信息,点击确认后可以正常访问。

    证书总结

    tomcat-client-p12.cer:客户端证书的公钥(双向认证特有,最终导入到tomcat.keystore里面)

    tomcat-client.p12:客户端证书的私钥(双向认证特有,客户端安装,导入个人证书下面,否则不起作用)

    tomcatserver.cer :服务端证书的公钥(客户端安装,受信任的根证书颁发机构下面

    tomcat.keystore:服务端证书库,既包含服务端私钥,又包含客户端公钥(服务器conf下面)

    浏览器安装证书

    双击tomcatserver.cer证书安装到受信任的根证书颁发机构

    Internet导入p12证书到个人证书

    最好用IE浏览器测试(一般浏览器只信任大厂颁发的证书,所以看起来不明显)。

    若服务端公钥不在受信任的根证书颁发机构下面,浏览器(IE)访问时会提示不安全。

    若客户端私钥证书安装不在个人下面,可能会出现下面的情况。

    Chrome出现:ERR_BAD_SSL_CLIENT_AUTH_CERT

    IE出现:无法安全地连接到此页面 这可能是因为该站点使用过期的或不安全的 TLS 安全设置。如果这种情况持续发生,请与网站的所有者联系。 TLS 安全设置未设置为默认设置,这也可能导致此错误。

    双向认证最终效果图:

  • 相关阅读:
    poj 2676 Suduku (dfs)
    poj 1562 Oil Deposits (dfs)
    poj 2907 Collecting Beepers (dfs)
    poj 1655 Balancing Act (树形dfs)
    poj 3411 Paid Roads (dfs)
    hdu 2896 病毒侵袭 (AC)
    hdu 3065 病毒侵袭持续中 (AC)
    poj 2251 Dungeon Master (bfs)
    java中debug使用
    Swing入门级小项目总结
  • 原文地址:https://www.cnblogs.com/aeolian/p/11906695.html
Copyright © 2011-2022 走看看