前言

一些网络安全工具会影响软件的使用,如果公司有网管软件,可能会出现无法创建服务器,或无法通过localhost访问的情况,因此我通过虚拟机win7创建测试,系统只运行了杀毒软件。

本文采用tomcat搭建https服务器,通过Postman测试https功能,所用软件均为安装版本,环境需要jdk,系统为win7 64位,具体版本如下:

apache-tomcat-10.0.2

Postman-8.0.4

jdk-15.0.2

全部安装完成后,进行jdk环境变量配置(如果tomcat是通过Tomcat10w.exe图形界面启动的,那么可以不用配置,一般它自己会去找到jdk,并完成配置,为避免麻烦,本文需要配置)

JRE_HOME:C:\Program Files\Java\jdk-15.0.2

JAVA_HOME:C:\Program Files\Java\jdk-15.0.2

CATALINA_HOME:C:\Program Files\Apache Software Foundation\Tomcat 10.0

环境变量 path 中增加:C:\Program Files\Java\jdk-15.0.2\bin

一、HTTPS单向认证

步骤比较简单:创建证书、搭服务器、客户端访问测试。

1、tomcat的证书创建、转换与服务器配置

1.1 证书生成

测试用的证书文件可以用 jdkkeytool 工具生成,有条件的可以去一些云服务商(腾讯云、阿里云都有)申请证书,具体命令如下:

#在要生成证书的目录下,通过cmd执行
keytool -genkey -alias tomcat -keyalg RSA -keystore .\cert.keystore
1.2 证书转换

jks:就是java keytool生成的证书库文件,包含证书和私钥。

p12:正常证书文件,也包含证书和私钥,比如服务器备份时就有采用这种格式。

转换参考《p12(PKCS12)和jks互相转换 - Beef Liu - 博客园https://www.cnblogs.com/got-my-way/p/6256306.html》

我已经有一个p12格式的ecc证书了,所以做个转换来用就好了,命令如下:

keytool -importkeystore -srckeystore test0121Ecc.p12 -destkeystore test0121Ecc.jks -deststoretype pkcs12
#密码123456
#当然p12也可以转成jks
keytool -importkeystore -srckeystore test0121Ecc.jks -destkeystore test0121Ecc1.p12 -deststoretype PKCS12

转好证书,修改tomcat服务器配置文件server.xml,增加一个Connector即可,原来的8080普通访问方式可以不用改。(下面是采用ecc加密的证书测试)

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    -->
    <!-- Define an SSL/TLS HTTP/1.1 Connector on port 8443
         This connector uses the NIO implementation. The default
         SSLImplementation will depend on the presence of the APR/native
         library and the useOpenSSL attribute of the
         AprLifecycleListener.
         Either JSSE or OpenSSL style configuration may be used regardless of
         the SSLImplementation selected. JSSE style configuration is used below.
    -->
    <!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>
    -->

<!--以下新增的部分-->
    <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/test0121Ecc.jks" 
                         certificateKeystorePassword="123456" 
                         type="EC"/>
        </SSLHostConfig>
    </Connector>
<!--以上新增的部分-->
1.3 tomcat启动

有了证书以及配置了服务器配置,就可以启动服务器了,两种方法启动:

1、通过C:\Program Files\Apache Software Foundation\Tomcat 10.0\bin\Tomcat10w.exe

2、通过C:\Program Files\Apache Software Foundation\Tomcat 10.0\bin\startup.bat

第一种方式比较简单,图形界面,几乎就是一键操作,直接开启start按钮或stop暂停按钮就行。

第二种方式,建议修改这个脚本,在最后加个pause,以此来看启动过程会有什么问题。这种方式启动,会看到有一些乱码,如下所示,其实就是编码错误问题(看不顺眼就改,不改也影响不大),可以修改tomcat目录的conf子目录中一个名为 “logging.properties” 的文件,找到如下配置项并修改:

#java.util.logging.ConsoleHandler.encoding = UTF-8
java.util.logging.ConsoleHandler.encoding = GBK

乱码现象:

04-Feb-2021 19:10:19.201 淇℃伅 [main] org.apache.catalina.startup.HostConfig.deployDirectory 鎶妛eb 搴旂敤绋嬪簭閮ㄧ讲鍒扮洰褰?[C:\Program Files\Apache Software Foundation\Tomcat 10.0\webapps\host-manager]
04-Feb-2021 19:10:19.251 淇℃伅 [main] org.apache.catalina.startup.HostConfig.deployDirectory Web搴旂敤绋嬪簭鐩綍[C:\Program Files\Apache Software Foundation\Tomcat 10.0\webapps\host-manager]鐨勯儴缃插凡鍦╗49]姣鍐呭畬鎴?
04-Feb-2021 19:10:19.251 淇℃伅 [main] org.apache.catalina.startup.HostConfig.deployDirectory 鎶妛eb 搴旂敤绋嬪簭閮ㄧ讲鍒扮洰褰?[C:\Program Files\Apache Software Foundation\Tomcat 10.0\webapps\manager]
04-Feb-2021 19:10:19.292 淇℃伅 [main] org.apache.catalina.startup.HostConfig.deployDirectory Web搴旂敤绋嬪簭鐩綍[C:\Program Files\Apache Software Foundation\Tomcat 10.0\webapps\manager]鐨勯儴缃插凡鍦╗41]姣鍐呭畬鎴?
04-Feb-2021 19:10:19.293 淇℃伅 [main] org.apache.catalina.startup.HostConfig.deployDirectory 鎶妛eb 搴旂敤绋嬪簭閮ㄧ讲鍒扮洰褰?[C:\Program Files\Apache Software Foundation\Tomcat 10.0\webapps\ROOT]
04-Feb-2021 19:10:19.326 淇℃伅 [main] org.apache.catalina.startup.HostConfig.deployDirectory Web搴旂敤绋嬪簭鐩綍[C:\Program Files\Apache Software Foundation\Tomcat 10.0\webapps\ROOT]鐨勯儴缃插凡鍦╗33]姣鍐呭畬鎴?
04-Feb-2021 19:10:19.342 淇℃伅 [main] org.apache.coyote.AbstractProtocol.start寮€濮嬪崗璁鐞嗗彞鏌刐"http-nio-8080"]
04-Feb-2021 19:10:19.372 淇℃伅 [main] org.apache.coyote.AbstractProtocol.start寮€濮嬪崗璁鐞嗗彞鏌刐"https-jsse-nio-443"]
04-Feb-2021 19:10:19.377 淇℃伅 [main] org.apache.catalina.startup.Catalina.start [1536]姣鍚庢湇鍔″櫒鍚姩

修复后

04-Feb-2021 20:06:02.982 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory Web应用程序目录[C:\Program Files\Apache Software Foundation\Tomcat 10.0\webapps\host-manager]的部署已在[47]毫秒内完成
04-Feb-2021 20:06:02.998 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [C:\Program Files\Apache Software Foundation\Tomcat 10.0\webapps\manager]
04-Feb-2021 20:06:03.054 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory Web应用程序目录[C:\Program Files\Apache Software Foundation\Tomcat 10.0\webapps\manager]的部署已在[56]毫秒内完成
04-Feb-2021 20:06:03.054 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [C:\Program Files\Apache Software Foundation\Tomcat 10.0\webapps\ROOT]
04-Feb-2021 20:06:03.086 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory Web应用程序目录[C:\Program Files\Apache Software Foundation\Tomcat 10.0\webapps\ROOT]的部署已在[32]毫秒内完成
04-Feb-2021 20:06:03.101 信息 [main] org.apache.coyote.AbstractProtocol.start 开始协议处理句柄["http-nio-8080"]
04-Feb-2021 20:06:03.132 信息 [main] org.apache.coyote.AbstractProtocol.start 开始协议处理句柄["https-jsse-nio-443"]
04-Feb-2021 20:06:03.132 信息 [main] org.apache.catalina.startup.Catalina.start[1380]毫秒后服务器启动

2、Postman测试

通过 https://localhost,(默认端口即443)进行访问测试。也可以用浏览器访问测试。

2.1 测试可能出现的证书问题

通过GET访问时,返回:

Error: self signed certificate in certificate chain

设置里关闭SSL certificate verification即可。

二、HTTPS双向认证(待整理)

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐