前言

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

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

安装证书

安装根证书

  • 生成根证书

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

  • 导出证书公钥

生成了 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

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添加到可信任的根证书颁发机构(服务器信任根证书 所以把根证书添加到可信任的机构 通过根证书访问服务器证书 所以就不需要再把服务器证书添加到可信任的颁发机构了)不同的操作系统添加方式类似

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

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

域名配置

在/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 就应该直接访问项目页面而不是再出现“隐私设置错误”这样的安全提示呀,有这知道的大神们,欢迎留言

本文使用 mdnice 排版

实现tomcat的https单向认证及双向认证相关推荐

  1. SSL证书配置(https访问接口, 单向认证和双向认证)

    拿到SSL证书后, 如何才能解锁更多玩法? 一. SpringBoots项目配置https访问接口(直接配置) SSL协议 配置步骤 1. 获取证书/ 生成证书 2. 放置证书 3. 配置项目 pro ...

  2. Tomcat SSL/HTTPS 单向认证

    前言 jdk 1.8 tomcat 7 jks证书库 准备 1.已经生成名为localhost.jks的证书库,证书库的密码为localhost. 2.证书库中有别名为localhost的证书,证书的 ...

  3. https 单向认证和双向认证

    转载自   https 单向认证和双向认证 一.Http HyperText Transfer Protocol,超文本传输协议,是互联网上使用最广泛的一种协议,所有WWW文件必须遵循的标准.HTTP ...

  4. https ssl单项认证和双向认证以及证书生成

    HTTP(HyperText Transfer Protocol,超文本传输协议)被用于在Web浏览器和网站服务器之间传递信息,在TCP/IP中处于应用层.这里提一下TCP/IP的分层共分为四层:应用 ...

  5. SSL/TLS单向认证和双向认证介绍

    为了便于理解SSL/TLS的单向认证和双向认证执行流程,这里先介绍一些术语. 1. 散列函数(Hash function):又称散列算法.哈希函数,是一种从任何一种数据中创建小的数字"指纹& ...

  6. 服务器双向认证 原理,什么叫SSL双向认证 SSL双向认证过程是怎样的

    我们都知道SSL认证能够分成SSL双向认证和SSL单向认证.那么,什么是SSL双向认证?SSL双向认证过程又是怎样的?小编就在接下来的内容为各位详细讲述. 什么叫SSL双向认证 SSL双向认证则是需要 ...

  7. Windows 环境 Tomcat 的 HTTPS 单向认证和双向认证的配置

    2019独角兽企业重金招聘Python工程师标准>>> 单向认证,说的是浏览器验证服务器的真实性,双向认证是服务器也验证浏览器用户的真实性. 1.使用keytool生成keystor ...

  8. Https单向认证和双向认证介绍

    一.Http HyperText Transfer Protocol,超文本传输协议,是互联网上使用最广泛的一种协议,所有WWW文件必须遵循的标准.HTTP协议传输的数据都是未加密的,也就是明文的,因 ...

  9. 干货 | 图解 https 单向认证和双向认证!

    一.Http HyperText Transfer Protocol,超文本传输协议,是互联网上使用最广泛的一种协议,所有WWW文件必须遵循的标准.HTTP协议传输的数据都是未加密的,也就是明文的,因 ...

最新文章

  1. 从0实现一个tinyredux
  2. VS2017使用过程中得到的一些技巧方法和注意点
  3. 一个通过引用返回局部变量的列子
  4. Java中从Orcle里取出数据时,为什么提示“无效的列索引”
  5. Bootstrap4+MySQL前后端综合实训-Day03-PM【iframe设置最小宽度】
  6. JProfiler9安装 监控Tomcat
  7. Python函数中的变量作用域
  8. C++模版类的简单使用
  9. java linux 服务_java项目部署Linux服务器几种启动方式总结经验
  10. 8.GitLab 里程碑
  11. java输出date_Java萌新的小小总结:Date日期类数据以给定格式打印输出
  12. WPS专业版可用key
  13. 在做模具设计过程中应注意哪些问题
  14. Matlab 线性拟合 polyfit 结果不准/偏差很大
  15. 父进程回收子进程之wait()函数使用解读
  16. PHP error_reporting
  17. AJAX框架眼镜盒可爱,亲爱的顾客,这是一套框架眼镜日常护理的方法,请您收好!​...
  18. virtualBox新建虚拟电脑
  19. NPOI 导入导出和Excel版本,错误文件扩展名和文件的格式不匹配
  20. SpringMVC:通配符的匹配很全面, 但无法找到元素 ‘context:component-scan‘ 的声明

热门文章

  1. string中c_str()用法总结
  2. 如何用python处理txt_python处理txt文件操作
  3. ThingJS平台制作第一人称视角下的巡更效果
  4. 查看数据库大小或者表大小
  5. Python程序员面试必备常用问题答案及解析
  6. HiTSDB 时序数据库技术架构和产品解析
  7. 日本研发高精度诊疗感应器,或颠覆疾病诊疗
  8. 白宫任命退伍将军担任首位联邦首席信息安全官
  9. MySQL数据库的基本操作命令
  10. Memcahce(MC)系列(三)Memcached它PHP转让