javaWeb项目http转https详细过程记录

Posted 怀小念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaWeb项目http转https详细过程记录相关的知识,希望对你有一定的参考价值。

前言:

      因为数据安全性问题,需要将Web服务协议由http转为https,这里使用Keytool 来生成证书,Keytool 是一个JAVA环境下的安全钥匙与证书的管理工具,Keytool将密钥(key)和证书(certificates)存在一个称为keystore 的文件(受密码保护)中。

      (ps:我们可以在java安装的bin目录找到这个keytool.exe程序)      

       keytool的命令说明: 
             通过win+R输入cmd,然后输入以下命令: keytool -genkey -help,就会出现如下:
      keytool -genkeypair [OPTION]…
      命令说明:
        -alias 要处理的条目的别名
        -keyalg 密钥算法名称
        -keysize 密钥位大小
        -sigalg 签名算法名称
        -destalias 目标别名
        -dname 唯一判别名
        -startdate 证书有效期开始日期/时间
        -ext X.509 扩展
        -validity 有效天数
        -keypass 密钥口令
        -keystore 密钥库名称
        -storepass 密钥库口令
        -storetype 密钥库类型
        -providername 提供方名称
        -providerclass 提供方类名
        -providerarg 提供方参数
        -providerpath 提供方类路径
        -v 详细输出
        -protected 通过受保护的机制的口令

实现过程:  (转载自: https://blog.csdn.net/su_zp/article/details/93853054 )

      1. 生成秘钥文件   

          以管理员的身份进入 cmd,在cmd里进入jdk的bin路径下,然后输入 以下命令:keytool -genkey -alias tomcat -keyalg RSA -keysize 2048 -keypass 123456 -validity 36600 -keystore E:\\key\\m.jks -storepass 123456
          输入上面命令就会出现如下信息:

         您的名字与姓氏是什么?
      [Unknown]: 这里输入你的ip,若是服务器的话,就输入域名,后面的信息就随便输入即可
      您的组织单位名称是什么?
      [Unknown]:
      您的组织名称是什么?
      [Unknown]:
      您所在的城市或区域名称是什么?
      [Unknown]:
      您所在的省/市/自治区名称是什么?
      [Unknown]:
      该单位的双字母国家/地区代码是什么?
      [Unknown]:
      CN=172.172.172.172, OU=x, O=x, L=x, ST=x, C=x是否正确?
      [否]: y 这里输入值是让你确认你上面的信息是否正确,若不正确,除了y的其他都可以。输入之后就会重复上面的操作。

          

         执行完成之后就可以在e盘下面的key文件夹下生成一个密钥m.jks

     2.  导出证书

         命令:keytool -export -alias tomcat -keystore E:\\key\\m.jks -file E:\\key\\m.crt -storepass 123456
         执行后会出现如下提示:存储在文件 <E:\\key\\m.crt> 中的证书

    3. 客户端导入证书    

         命令:keytool -import -keystore "%JAVA_HOME%\\jre\\lib\\security\\cacerts -file  "E:\\key\\m.crt" -alias tomcat

          ps: 参数路径如果带空格,一定要加" ",否则汇报Files错误

        执行后

              输入密钥库口令: 这里输入的口令必须是changeit; 输入完成后就会出现如下信息,若%JAVA_HOME%\\jre\\lib\\security\\目录下没有cacerts,还要再输入一次changeit;
    所有者: CN=172.172.172.172, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
    发布者: CN=172.172.172.172, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown  
    序列号: 402163bd
    有效期开始日期: Fri Feb 24 16:53:06 CST 2017, 截止日期: Tue May 11 16:53:06 CST 2117
    证书指纹:
    MD5: A8:ED:C3:13:24:F5:D9:7E:E1:AF:B0:BB:B4:8C:EA:EA
    SHA1: 6B:69:79:1A:B0:AD:46:E2:98:74:FF:79:22:E6:A4:7B:7F:4E:9D:19
    SHA256: B3:23:F5:DD:6E:42:A4:14:CF:6A:9D:83:43:7A:9E:FA:B1:69:24:E5:15:DD:A5:97:BB:94:A5:A9:29:8D:2D:BE
    签名算法名称: SHA256withRSA
    版本: 3

              是否信任此证书? [否]: y 输入y即可
         证书已添加到密钥库中
   4. 配置tomcat文件     

       找到tomcat目录下的conf文件下的server.xml;

       找到
      <Connector port="8080" protocol="HTTP/1.1"
                 connectionTimeout="20000"
                 redirectPort="8443" />

       在这个后面加入

       <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
                //如果要修改端口号请注意一起修改其他相同的端口号。
                maxThreads="1500"
                SSLEnabled="true"
                scheme="https"
                secure="true"
                clientAuth="false"
                sslProtocol="TLS"
                keystoreFile="E:\\key\\m.jks"  这里是你生成密钥的路径
                keystorePass="123456"       这里是你生成密钥时的密码
                keyAlias="tomcat"                 这里是你设置的别名(记得保持一致)
                keystoreType="JKS" />
        到这里就配置完了,然后启动tomcat,输入https://您的名字与姓氏:8443/就会出现如下界面

        

 

 

          5.  自动将http请求转为https

              在apache tomcat中的/conf/web.xml或者项目中 的web.xml文件前面面加上这样一段:         

<login-config>
       <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>

              在浏览器里以http访问tomcat或者项目进会自动跳转到https请求地址。

6. 访问页面,使用IE浏览器访问会出现以下问题

     

 

        出现此页面的原因是浏览器端需要安装证书(当然,点击转到此页也是可以继续访问的),IE证书安装方式如下:

       点击转到此页,进入项目页面,浏览器右上角会有证书错误的提示,如下图

        

 

        点击查看证书

        

 

        点击安装证书:

          

 

         根据实际情况选择,然后点击下一步:

         

 

        导入证书到受信任的证书颁发机构,下一步

        

 

       点击完成,开始安装.

          

          点击是,完成安装.

          

       安装完成后重启浏览器,再次访问就不会出现上面的提示页面了

 

      7. 使用chrome访问,会自动导入证书,但是也会出现类似问题,如下图

           

       我们进入Chrome的设置,点击安全

       

 

               选择管理证书

        

 

        如果在受信任的证书颁发机构里面没有找到对应的证书,导入相应的证书即可

        

 

        

 

         

        PS: 证书文件的页面可以下载到,如下图,点击到复制到文件即可下载出来

 

                                        

 

 

        

       

 

      

 

       

       安装证书后,如果还没有解决, 原因是由于 Chrome停止使用个人自己签署的SSL证书,就是说如果不是权威认证机构颁发的证书,此页面提示会一直存在.  

        解决方式如下:  详见: https://www.codenong.com/43665243/

             

           

      

     

以上是关于javaWeb项目http转https详细过程记录的主要内容,如果未能解决你的问题,请参考以下文章

HTTP与HTTPS的区别,详细介绍(转)

IDEA SpringBoot多模块项目搭建详细过程(转)

JavaWeb项目(登录注册页面)全过程详细总结

转SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

转: 数字证书原理 https 完整过程解析

在Tomcat下http协议转https协议