Tomcat服务器配置https双向认证,使用JDK的keytool生成证书(适用于web、安卓、IOS)
一、原理
1.HTTP:平时浏览网页时候使用的一种协议。HTTP协议传输的数据都是未加密的(明文),因此使用HTTP协议传输隐私信息非常不安全。
2.HTTPS:为了保证隐私数据能加密传输,采用SSL/TLS协议用于对HTTP协议传输的数据进行加密,也就是HTTPS。
二、说明
1.原因:因有些情况使用到HTTPS也就是SSL证书验证以便加密信息,所以使用证书
2.选择性:自签免费,不需要金额,CA的收费每年都要给钱的,具体多少没有关注
3.途径:有多种,本人找到了两种,一个的本篇文章叙述的JDK自带的。,还有一个是OPENSSL可以做的。这里不体现出来。
4.生成环境与工具:windows.jdk1.8,tomcat8
三、步骤
1.服务器证书
1.1进入到jdk中jre目录控制台中;
可以在jre文件中按住shift+鼠标右键打开控制台命令
或者cmd命令cd C:\Program Files\Java\jre1.8.0_91\bin
1.2.通过keytool命令生成服务端证书(库)
keytool -genkey -v -alias server -keyalg RSA -keystore G:\server.keystore -validity 36500
参数说明:G:\server.keystore:将名为server.keystore的证书保存到G盘目录下
-validity 36500:证书有效期,36500表示100年,默认值是90天
server:自定义证书名称

输入密钥库口令:keystore密码(假设使用123456)此密码是隐式性的,所以看不到
您的名字与姓氏是什么:必须是TOMCAT部署主机的域名或者IP[如:123456.com 或者 1192.168.0.1](就是你将来要在浏览器中输入的访问地址),
否则浏览器会弹出警告窗口,提示用户证书与所在域不匹配。在本地做开发测试时,应填入“localhost”。
其他的可以随意填写目前没有出现什么特别情况
输入 的密钥口令:直接回车.
2.客户端证书
2.1证书格式应该是PKCS12,以及jks模式。这第一个P12证书是给浏览器和IOS客户端验证用的,而安卓不能用keystore的密码库所以要生成jks然后通过工具转换成bks。
2.1.1以下是生产安卓端所用的jks文件
keytool -genkeypair -alias client -keyalg RSA -validity 36500 -keypass 123456 -storepass 123456 -keystore G:\client.jks

其中:-keypass 123456 表示密码是123456(转换时需要用到)其他的同上。
2.1.2生成p12文件
keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore G:\mykey.p12

相关信息同上,密码这边假设是123456
3.让服务器信任客户端证书
3.1由于不能直接将PKCS12格式以及jks格式的的证书库导入,必须先把客户端证书导出为一个单独的CER文件,使用如下命令: (下面要用到客户端证书密码“123456”)
P12生成cer
keytool -export -alias mykey -keystore G:\mykey.p12 -storetype PKCS12 -storepass 123456 -rfc -file G:\mykey.cer
jks 生成 cer
keytool -export -alias client -file G:\client.cer -keystore G:\client.jks -storepass 123456
3.2将证书导入到服务器的证书库中
p12转换的cer导入到server库中
keytool -import -v -file G:\mykey.cer -keystore G:\server.keystore
将jks转换的cer导入到server库中
keytool -import -v -alias client -file G:\client.cer -keystore G:\server.keystore -storepass 123456
4.双向验证
由于是双向SSL认证,客户端也要验证服务器证书。把服务器证书导出为一个单独的CER文件提供给客户端,使用如下命令:
keytool -keystore G:\server.keystore -export -alias server -file G:\server.cer
至此证书生成完成
3.证书的使用配置
3.1浏览器服务器配置
3.1.1服务器tomcat的配置
打开Tomcat根目录下的/conf/server.xml,找到Connector port="8443"配置段,修改为如下:

clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证
keystoreFile:服务器证书文件路径
keystorePass:服务器证书密码
truststoreFile:用来验证客户端证书的根证书,此例中就是服务器证书
truststorePass:根证书密码

浏览器输入https://192.168.0.1/8443 则会报无效证书或者链接不安(证书没有配置)
3.1.2双击“mykey.p12”导入客户端证书
再次使用浏览器访问服务端,浏览器会让我们选择使用的证书。
3.1.3.导入服务器公钥证书(server.cer)
由于是自签名的证书,为避免每次都提示不安全。这里双击server.cer安装服务器证书。
注意:将证书填入到“受信任的根证书颁发机构”

再次重新访问服务器,会发现没有不安全的提示了,同时浏览器地址栏上也有个“锁”图标,表示本次会话已经通过HTTPS双向验证。
3.2IOS配置
直接把P12文件 以及sever.cer文件给IOS开发人员就行了
3.3android配置实现 Portecle1.9
需要把jks转换成bks让安卓能识别验证步骤如下:
1.双击运行portecle.jar

此处输入的密码是你生成的bks文件时所用的密码(123456)

然后生成bks文件

这个密码是你给安卓人员的 他们要解析这个证书用的随机(123456)


最后提示SUCCESSFUL 表示成功

**重点:**由于生成生成功后需要保持的,文件名一定要加.bks结尾不然就直接生成了文件了,安卓识别不了

此时把.bks文件和sever.cer文件给安卓开发人员
最后强制tomcat走https
打开Tomcat安装目录中conf/web.xml文件,在最后面加上以下内容即可

CLIENT-CERT
Client Cert Users-only Area

SSL
/*

CONFIDENTIAL

四、其他相关说明
使用工具转换多次时会报异常这是因为如果密钥大于128, 会抛出java.security.InvalidKeyException: Illegal key size 异常. 因为密钥长度是受限制的, java运行时环境读到的是受限的policy文件. 文件位于${java_home}/jre/lib/security, 这种限制是因为美国对软件出口的控制
解决方案:去官方下载JCE无限制权限策略文件。

jdk 5: http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java-plat-419418.html#jce_policy-1.5.0-oth-JPR

jdk6: http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html

JDK7的下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
JDK8的下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

下载后解压,可以看到local_policy.jar和US_export_policy.jar以及readme.txt
如果安装了JRE,将两个jar文件放到%JRE_HOME%\lib\security目录下覆盖原来的文件
如果安装了JDK,还要将两个jar文件也放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件。
本文本人第一次编写,是叙述相关操作,不做任何说明,只是对自己所学所用的一个总结说明分享,其他人员参考时,引起法律法规情况,请自己谨慎考虑参考,如有意外,与本人无关。
本文在此编写感谢以下相关博主链接
https://blog.csdn.net/ldld1717/article/details/78593231
https://blog.csdn.net/u011084603/article/details/76143992
https://blog.csdn.net/u013938484/article/details/80455050
感谢三位博主分享。我是在前人的基础上总结一下。在此感谢。

Tomcat服务器配置https双向认证,使用JDK的keytool生成证书(适用于web、安卓、IOS)相关推荐

  1. 原 用Tomcat服务器配置https双向认证过程实战

    什么是https? 百度百科足够解释它:http://baike.baidu.com/view/14121.htm 工具:keytool (Windows下路径:%JAVA_HOME%/bin/key ...

  2. tomcat实现https双向认证配置

    Tomcat实现https双向认证配置 1.生成证书库 2.jks转p12 3.证书库导出cer文件 4.证书库生成证书请求 5.对证书请求进行签名 6.例子 6.1创建证书库 6.2导出根证书 6. ...

  3. tomcat实现https双向认证(在win10系统使用jdk1.8自带工具keytool)

    tomcat实现https双向认证(在win10系统使用jdk1.8自带工具keytool) 以下操作我在D:\shiro-cas-ssl进行操作 使用win+R运行certmgr.msc可以查看证书 ...

  4. 【ssl认证、证书】SSL双向认证java实战、keytool创建证书

    文章目录 概述 keytool示例 参考 相关文章: //-----------Java SSL begin---------------------- [ssl认证.证书]SSL双向认证和SSL单向 ...

  5. Tomcat下HTTPS双向认证配置以及客户端调用案例

    1:生成服务器端的keystore和truststore文件 (1)以jks格式生成服务器端包含Public key和Private Key的keystore文件 keytool -genkey -a ...

  6. SSL--用Tomcat服务器配置https双向认证过程实战

    http://blog.csdn.net/szzt_lingpeng/article/details/51248126

  7. https双向认证访问管理后台,采用USBKEY进行系统访问的身份鉴别,KEY的证书长度大于128位,使用USBKEY登录

    最近项目需求,需要实现用USBKEY识别用户登录,采用https双向认证访问管理后台管理界面,期间碰到过一些小问题,写出来给大家参考下. 1:前期准备工作 USBKEY 硬件:我买的是飞天诚信 epa ...

  8. https双向认证訪问管理后台,採用USBKEY进行系统訪问的身份鉴别,KEY的证书长度大于128位,使用USBKEY登录...

    近期项目需求,须要实现用USBKEY识别用户登录,採用https双向认证訪问管理后台管理界面,期间碰到过一些小问题,写出来给大家參考下. 1:前期准备工作 USBKEY 硬件:我买的是飞天诚信 epa ...

  9. kubernetes https双向认证-----ca认证

    为什么写这个呢? 在没有了解k8s认证的时候干过一件蠢事,公司项目是通过bearer token进行权限认证的,当时一直在纠结这个token是哪儿来的,然后各种查询secret对比是否一样,最后找到了 ...

最新文章

  1. (转载)动态SLAM系统:VDO-SLAM!
  2. 【C 语言】二级指针案例 ( 字符串切割 | 返回 自定义二级指针 作为结果 | 每个 一级指针 指向不同大小内存 | 精准分配每个 一级指针 指向的内存大小 )
  3. 我的Android进阶之旅------gt;Android中MediaRecorder.stop()报错 java.lang.RuntimeException: stop failed....
  4. android 判断滑动方向,H5触摸事件判断滑动方向
  5. 逐步优化求解最大子序列和
  6. HALCON示例程序check_bottle_crate.hdev啤酒箱内酒瓶数检测
  7. vue项目 一行js代码搞定点击图片放大缩小
  8. 【华为云技术分享】漫谈LiteOS-端云互通组件-MQTT开发指南(上)
  9. 树莓派3B 开启串口
  10. java与spss交互_典型相关分析及其适用范围和spss操作(转)
  11. 支付分账如何助力B2B大宗商品交易?
  12. PHP file_get_contents函数详解
  13. 抖音、快手、B站的广告投放原理
  14. python怎么返回上一步操作_一步一步教你如何用python操作mysql
  15. 5分钟读懂UML类图
  16. rand()函数详解
  17. C# WPF 建立无边框(标题栏)的登录窗口
  18. java map key是否存在_java如何判断map集合中是否存在key?
  19. IOS实用功能-陀螺仪
  20. Unity中根据设备名称获取串口号

热门文章

  1. odbc建oracle dsn,Linux平台配置Oracle ODBC DSN的方法
  2. MIPI RAW和YUV常见图像格式的解析、格式转换和看图软件
  3. 使用ip小魔棒让外部网络访问内网中的资源
  4. 购买计算机如何选择CPU,怎么选购笔记本电脑CPU 选购笔记本电脑CPU方法【详解】...
  5. Arduino Mixly入门到精通教程
  6. STN向城域云网演进浅析
  7. 【今日CV 计算机视觉论文速览 第101期】Wed, 17 Apr 2019
  8. ArcGIS engine中Display类库——Display(一)
  9. [散分] 眼见为实?_眼见为实
  10. 千里眼-智行千里,眼见为实 源码分享