美文网首页
《网络(二):简单易懂的https双向认证自制安全证书和tomc

《网络(二):简单易懂的https双向认证自制安全证书和tomc

作者: Oneminute | 来源:发表于2018-10-27 16:36 被阅读0次

网络(一):简单易懂的Https工作原理

网络(二):简单易懂的https双向认证自制安全证书和tomcat配置

网络(三):简单易懂的Android平台Okhttp/Retrofit https证书配置

1、环境

电脑环境配置%JAVA_HOME%/bin/keytool.exe(jdk下一个工具)
windwos10
tomcat 7.0
IE 11

2、何为证书

以下两张截图是浏览器查看证书的信息,它包含了各种信息。

image.png
image.png

下面将列出几个后相关缀名的证书和它的简单介绍
keystore:
jks:数字证书库。
p12:是PKCS12的缩写。同样是一个存储私钥的证书库,由.jks文件导出的,用户在PC平台安装,用于标示用户的身份。
cer:俗称数字证书,目的就是用于存储公钥证书,任何人都可以获取这个文件 。
bks:由于Android平台不识别.keystore和.jks格式的证书库文件,因此Android平台引入一种的证书库格式,BKS。

注:证书之间的转换可以用工具portecle来进行转换;在https中证书扮演者重要角色,它保证颁发机构、有效期、加密密钥、加密算法等信息。

3、要生成的证书

1)https双向认证:即客户需要对服务器端身份进行认证,服务器端也需要对客户端身份进行认证

2)为客户端和服务器生成key,然后由key导出各自的证书

下面就开始生成个key和导出对应的证书,每一个步骤出命令和执行的截图。

为服务端生成keystore

keytool -genkeypair -alias server -keyalg RSA -validity 3650  -keystore  F:\server.keystore
image.png

导出服务器证书

keytool -export -alias server -file F:\server.cer -keystore F:\server.keystore 
image.png image.png

生成客户端key

keytool -genkeypair -alias client -keyalg RSA -validity 3650 -keystore F:\client.jks
image.png

导出客户端证书

keytool -export -alias client -file F:\client.cer -keystore F:\client.jks 
image.png

3)证书交换
证书互换的原因:只有你中有我、我中有你,在双向认证时,我们才彼此认识,这个步骤非常重要!!!

将服务端的证书保存到 publickeys.jks中给客户端用识别服务端时用

keytool -import -v -alias server -file F:\server.cer -keystore F:\publickeys.jks
image.png

将客户端的证书保存到服务端的key中,给服务端识别客户端时用


image.png

你也可以通过list命令查看服务器的证书库,可以看到两个证书,一个是服务器证书,一个是受信任的客户端证书


image.png

至此,我们为客户端可服务端生成了密钥,以及导出各自的证书,并且为客户端的密钥和服务端的密钥导入了对方的证书(双向认证时用),接下来就要开始配置tomcat服务器了。

tomcat配置

1)首先把上述生成好的服务端密钥放到tomcat的conf目录下,并修改server.xml文件配置,配置代码如下:

  //其他配置省略...
   <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000" redirectPort="443" 
               />

    <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
               keystoreFile="conf/server.keystore" keystorePass="123321"
               truststoreFile="conf/server.keystore" truststorePass="123321"/>
                
    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="443" />

http的默认端口是80,https的默认端口是443,不这样配置会访问不到服务器。

2)修改web.xml文件配置,在最末尾添加如下配置,代码如下,让http发起得请求交给https处理。

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

这样tomcat的配置就好了,非常简单,重启服务器即可

浏览器访问https

IE浏览器


image.png image.png

接下来就需要为PC端导入相关的证书了,由于PC浏览器中存储的密钥的正式格式为p12,所以还需要把客户端的证书jks格式转为p12,证书的转换可以使用portecle工具(具体使用的百度一下就会很对资料了);客户端需要导入两个证书,一个是存储自己密钥的key,一个是服务端为客户端提供的公钥证书,用与客户对服务端的身份进行识别,证书的导入每一个过程都有截图,导入后重启服务器即可。

1)安装客户端证书

image.png
image.png image.png image.png

2)安装服务端证书

image.png image.png image.png image.png

最后请求服务器返回结果


image.png

相关文章

网友评论

      本文标题:《网络(二):简单易懂的https双向认证自制安全证书和tomc

      本文链接:https://www.haomeiwen.com/subject/lqpdtqtx.html