实现tomcat的https单向认证及双向认证

本文涉及的产品
Digicert DV 证书 单域名,20个 3个月
简介: 实现tomcat的https单向认证及双向认证

前言


  • 单向认证只需站点部署了ssl证书就行,任何用户都可以去访问(IP被限制除外等),只是服务端提供了身份认证


  • 一般web应用都是采用单向认证的,原因很简单,用户数目广泛,且无需做在通讯层做用户身份验证,一般都在应用逻辑层来保证用户的合法登入。但如果是企业应用对接,情况就不一样,可能会要求对client(相对而言)做身份验证。这时需要做双向认证。


安装证书


安装根证书


  • 生成根证书


生成了 root.p12 (根证书颁发机构密钥库即CA密钥库)
keytool -genkeypair -v -keystore root.p12 -storetype pkcs12 -storepass 123456 -alias 我是根证书 -keyal



image.png


  • 导出证书公钥


生成了 root.cer(CA密钥库导出CA根证书)
keytool -exportcert -file root.cer -keystore root.p12 -storepass 123456 -alias 我是根证书


安装服务器证书


  • 生成服务器证书


生成了 server.p12(服务器密钥库)
keytool -genkeypair -v -keystore server.p12 -storetype pkcs12 -storepass 123456 -alias key -keyalg RSA -keysize 2048 -validity 36500


  • 生成服务器证书


生成了 server.csr(使用服务器密钥库生成证书)
keytool -certreq -keystore server.p12 -storepass 123456 -alias key -file server.csr


  • 服务器证书使用ca认证(即根证书认证)


生成了 server.cer (使用ca密钥库认证此证书 并导出新证书)
keytool -gencert -v -infile server.csr -outfile server.cer -keystore root.p12 -storepass 123456 -alias 我是根证书


服务器信任根证书


  • 服务器密钥库信任ca根证书


keytool -importcert -file root.cer -keystore server.p12 -storepass 123456 -alias root



  • 认证后的证书重新导入服务器密钥库


keytool -importcert -file server.cer -keystore server.p12 -storepass 123456 -alias server


tomcat单向认证


tomcat server.xml配置


<Connector
protocol="org.apache.coyote.http11.Http11NioProtocol"
sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation"
port="8443" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="/Users/mengfanxiao/Documents/material/cas/server.p12" keystorePass="123456"
clientAuth="false" sslProtocol="TLS"/>


  • port="8443":https访问端口为8443(Tomcat已使用8080作为http的访问端口)


  • keystoreFile:存储加密证书的密钥库


  • keystorePass:密钥库访问密码(JKS格式的话,需要在生成密钥库时storepass和keypass相同)


  • clientAuth:是否验证客户端,false为单向认证,true为双向认证。双向认证时需要提供信任证书列表(需配置truststoreFile,truststorePass属性)


访问 https://127.0.0.1:8443



image.png


tomcat双向认证


生成客户端证书


  • 生成客户端密钥库


keytool -genkeypair -v -keystore client.p12 -storetype pkcs12 -storepass 123456 -alias client -keyalg RSA -keysize 2048 -validity 36500



  • 导出客户端证书


Keytool -exportcert -v -file client.cer -keystore client.p12 -storepass 123456 -alias client


使服务器信任客户端证书(第一种方式)


将客户端证书client.cer导入服务端密钥库信任证书列表
Keytool -importcert -v -file client.cer -keystore server.p12 -storepass 123456 -alias client


对应的tomcat配置


<Connector
protocol="org.apache.coyote.http11.Http11NioProtocol"
sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation"
port="8443" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="/Users/mengfanxiao/Documents/material/cas/way4/server.p12" keystorePass="123456"
truststoreFile="/Users/mengfanxiao/Documents/material/cas/way4/server.p12" truststorePass="123456"
clientAuth="true" sslProtocol="TLS"/>


将客户端证书生成新的密钥库(第二种方式)


Keytool -importcert -v -file client.cer -alias client -keystore trustore.p12 -storepass 123456 -storetype pkcs12


对应的tomcat配置


<Connector
protocol="org.apache.coyote.http11.Http11NioProtocol"
sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation"
port="8443" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="/Users/mengfanxiao/Documents/material/cas/way4/server.p12" keystorePass="123456"
truststoreFile="/Users/mengfanxiao/Documents/material/cas/way4/trustore.p12" truststorePass="123456"
clientAuth="true" sslProtocol="TLS"/>


安装CA根证书root.cer(CA密钥库公钥)到可信任的根证书颁发机构


将ca根证书cer添加到可信任的根证书颁发机构(服务器信任根证书 所以把根证书添加到可信任的机构 通过根证书访问服务器证书 所以就不需要再把服务器证书添加到可信任的颁发机构了)
不同的操作系统添加方式类似


将客户端密钥库添加到个人(包含私钥)


安装客户端密钥库到个人(注意,是密钥库而不是证书,因为在通信的时候需要用到私钥


image.png


域名配置


在/etc/hosts文件中配置
127.0.0.1 www.mengfanxiao.com
该域名 www.mengfanxiao.com 是创建密钥库的时候 填写的名称及姓氏


仅允许https访问即访问http也会转发到https


配置tomcat的conf/web.xml
<security-constraint>
       <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>


问题


按照我的理解是 既然都配置好了客户端和服务器端双方的证书并且彼此互相已认证 那么访问 https://127.0.0.1:8443 就应
相关文章
|
5月前
|
网络协议 Java 应用服务中间件
tomcat配置域名及HTTPS
tomcat配置域名及HTTPS
|
8月前
|
运维 Java 应用服务中间件
Tomcat详解(七)——Tomcat使用https配置实战
Tomcat详解(七)——Tomcat使用https配置实战
1272 4
|
8月前
|
运维 安全 Linux
CA认证与HTTPs原理介绍
CA认证与HTTPs原理介绍
221 2
|
8月前
|
存储 缓存 安全
https跳过SSL认证时是不是就是不加密的,相当于http?
https跳过SSL认证时是不是就是不加密的,相当于http?
427 0
|
8月前
|
网络安全
tomcat8绑定两个https域名
tomcat8绑定两个https域名
|
8月前
|
JSON 安全 网络安全
超详细的用户认证、权限、安全原理详解(认证、权限、JWT、RFC 7235、HTTPS、HSTS、PC端、服务端、移动端、第三方认证等等)
超详细的用户认证、权限、安全原理详解(认证、权限、JWT、RFC 7235、HTTPS、HSTS、PC端、服务端、移动端、第三方认证等等)
1183 0
|
算法 安全 网络安全
【厨房测试系列】第一章 手撸压力机(四)- http证书认证的实现
我们知道通常https接口是通过ssl/tsl进行加密的,有时候我们的请求https接口需要进行验证,需要在客户端发送请求时,带上密钥对通过摘要算法计算出的摘要及明文进行加密,而服务端则通过密钥进行解密。
|
8月前
|
算法 安全 Java
Java【算法 04】HTTP的认证方式之DIGEST认证详细流程说明及举例
Java【算法 04】HTTP的认证方式之DIGEST认证详细流程说明及举例
704 0
|
8月前
|
负载均衡 安全 应用服务中间件
Nginx + Tomcat+HTTP/HTTPS实现负载均衡实例
Nginx + Tomcat+HTTP/HTTPS实现负载均衡实例
226 0
|
应用服务中间件 Apache
tomcat http 404
tomcat http 404
149 0