简介:

  数字证书作为网络安全数据传输的凭证,web在传输时客户端(浏览器)和 服务端(服务器)先进行会话握手,在握手过程中服务端会验证客户端的是否已经在服务端做了认证,这是单向认证。如果是双向认证的话,客户端云会校验请求的服务器是否是已认证的安全。当所有的验证通过后,客户端和服务端才会建立安全的连接。这个时候才能保证数据的传输是安全的。

设计方案:

  1. 服务器维护一个秘钥库server.jks 并重秘钥库中导出证书 server.cer。
  2. 客户端证书,由管理员创建 client.p12 和导出证书 client.cer,可以创建多个客户端证书。
  3. 导出的证书client.cer需要导入到server.jks秘钥库中认证。
  4. 人后下发给客户端的安装文件包含 client.p12 和 server.cer。

技术实现:

环境:JDK 1.8.0,IE浏览器 v.11.0,谷歌浏览器v.74.0

工具:keytool

示例

  1. 1、创建服务器秘钥库

keytool
-genkey //创建指令
-v //详细输出
-alias server_key //唯一别名
-keyalg RSA //加密类型
-keysize 4096 //秘钥格式大小
-sigalg SHA256withRSA //签名算法名称
-keystore server.jks //秘钥名称
-validity 36500 //有效期
-dname "CN=*.runcui.net,OU=runcui Inc,O=IT,L=ShenZhen,ST=GuangDong,C=CN" //参数设置,CN=“服务器域名”
-ext "SAN=DNS:localhost,IP:172.20.10.4" //X.509 扩展,设置主题备注名
-ext "BC=ca:true" //
-storepass server1234 //秘钥库密码
-keypass server1234 //秘钥密码

  1. 2、导出服务证书

keytool
-exportcert
-v
-rfc
-alias server_key
-keystore server.jks
-file server.cer
-storepass server1234
-keypass server1234

  1. 3、创建客户端秘钥(文件类型 .P12)

keytool
-genkey
-v
-alias client
-keyalg RSA
-keysize 4096
-sigalg SHA256
-storetype PKCS12
-keystore client.p12
-validity 30
-dname "CN=*.runcui.net,OU=runcui Inc,O=client,L=ShenZhen,ST=GuangDong,C=CN"
-storepass client1234
-keypass client1234

  1. 4、导出客户端证书

keytool
-exportcert
-v
-rfc
-alias client
-keystore client.p12
-file client.cer
-storepass client1234
-keypass client1234

  1. 5、服务器的秘钥库中导入客户端的证书,作为客户端访问服务器的可信校验凭证。

keytool
-import
-v
-alias clientkey
-file client.cer
-keystore server.jks
-storepass server1234
-keypass server1234

  1. 6 、查看秘钥库的中的证书

keytool -v -list  -keystore server.jks -storepass server1234 -keypass server1234

  1. 7 、删除秘钥库中的客户端证书

keytool --delete -alias clientkey -keystore server.jsk

  1. 8、tomcat 配置server.xml

<Connector port="8080" protocol="HTTP/1.1"

SSLEnabled="true" maxThreads="150" scheme="https"

secure="true" clientAuth="true" sslProtocol="TLS"

keystoreFile="D:\\keytool\\example01\\server.jks" keystorePass="server1234" truststoreFile="D:\\keytool\\example01\\server.jks"

truststorePass="server1234"/>

  属性:

clientAuth : 设置双向认证 true、默认为单向认证 false

sslProtocol:

keystoreFile:秘钥库路径

keystorePass:秘钥库口令

truststoreFile:秘钥库根目录

truststorePass:口令

示例代码:

  1. 9、生成的文件

  1. 10、客户端安装证书

#、客户端需要安装的两个文件。

#、运行“certmgr.msc”命令,进入证书控制台,分别这两个目录下安装证书

# 、“个人”->“证书”右键导入,进入向导

#、选择 .p12文件,下一步

#、输入密码按下一步,密码是生成p12文件时配置密码 “-storepass xxxxxx"

#、然后以下的步骤就一直点到完成,导入后控制台会有安装的文件

  1. 11、安装服务端证书

#、安装

#、选择服务器证书

#、直接点击下一步

#、会出现警告信息,点击“是”即可

#、已包含安装的服务器证书。

  1. 12、访问服务器,需要使用https 访问,显示域名安全锁

问题与解决方案:

问题1:每次在秘钥库中导入客户端的证书后,都要重启tomcat服务才能加载到新添加的证书。如何能将tomcat每次都能自动加载秘钥库,保证每次导入的新证书被加载到。

问题2:nginx+tomcat 配置证书双向认证

解决方案:博友们对问题1有更好的建议或方案,欢迎留言共同探讨。

JAVA JDK keytool 生成数字证书的更多相关文章

  1. JDK 生成数字证书

    JDK(keytool.exe)生成数字证书 2010-11-21 15:52 QUOTE: keytool JAVA是个密钥和证书管理工具.它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数 ...

  2. 利用keytool工具生成数字证书

    一.制作数字证书  因测试微信小程序, 腾讯要求使用 https协议,所以需要使用证书.使用jdk工具制作数字证书流程如下: 1.查看JDK是否安装,使用命令java -version 2.切换目录至 ...

  3. 使用jdk的keytool 生成CA证书的方法

    一.CA证书生成设置总共分为以下5步: 步骤: 1.根据java的keytool生成CA根证书,放在服务器 2.根据服务器CA根证书导出客户端证书 3.tomcat增加SSL配置 4.客户端IE浏览器 ...

  4. JAVA调用 keytool 生成keystore 和 cer 证书

    keytool是一个Java数据证书的管理工具, keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里, 包含两种数据: 密钥实体( ...

  5. 利用JDK自带工具keyTool生成安全证书

    前言:说一下最近做的工作,主要利用iText给网页中生成好的html报表转化为pdf格式的文件,并且在其中加入水印,数字签名等等,这部分主要介绍安全证书的目的就是为了做数字签名部分用的. 下面利用jd ...

  6. java 调用 keytool 生成keystore 和 cer 证书

    keytool是一个Java数据证书的管理工具, keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里, 包含两种数据:密钥实体(K ...

  7. Java加密解密与数字证书的操作

    1 keytool命令总结 一.创建数字证书 交互模式 使用默认的密钥库.keystore(文件夹是c: Documents and Settingusername)和算法(DSA) keytool  ...

  8. 使用keytool生成ssl证书

    使用keytool生成ssl证书 在项目中由于要使用https访问项目,然后了解到jdk有一个自带的工具keytool可以用来生成ssl证书,从而可以通过https进行访问. 使用keytool生成s ...

  9. jdk keytool 自签证书

    jdk keytool 自签证书 https需要用到ssl证书,可以从阿里等平台申请,本文采用jdk keytool进行自签证书. 生成环境:linux 用jdk自带keytool工具生成密钥库 ke ...

随机推荐

  1. spring源码系列博文总索引

    一 目录 准备 1 使用Gradle构建spring5源码的一些坑和步骤 IOC模块 1spring IOC接口设计分析 2 spring IOC容器实现类分析 3 spring IOC特定场景源码步 ...

  2. POJ_1042_贪心

    题目描述: 每组数据给你n个胡,h小时时间,每个湖一次可钓鱼数量,每个湖每次钓鱼后下次可钓鱼数量的减少量,从每个湖到下一个湖所需时间.求最大钓鱼量. 要注意的是,刚开始在第一个湖,每次移动只能往下一个 ...

  3. Go语言实现:【剑指offer】不用加减乘除做加法

    该题目来源于牛客网<剑指offer>专题. 第一步:相加各位的值,不算进位,得到010,二进制每位相加就相当于各位做异或操作,101^111. 第二步:计算进位值,得到1010,相当于各位 ...

  4. Go语言实现:【剑指offer】序列化二叉树

    该题目来源于牛客网<剑指offer>专题. 请实现两个函数,分别用来序列化和反序列化二叉树. 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建 ...

  5. php面试笔记(4)-php基础知识-流程控制

    本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而流程控制相关的 ...

  6. Spring Bean几种注入方式——setter(常用),构造器,注入内部Bean,注入集合,接口...

    依赖注入分为三种方式: 1.1构造器注入 构造器通过构造方法实现,构造方法有无参数都可以.在大部分情况下我们都是通过类的构造器来创建对象,Spring也可以采用反射机制通过构造器完成注入,这就是构造器 ...

  7. expect知识梳理

    1 expect expect软件用于实现非交互式操作,实际应用中常用于批量部署,可以帮助运维人员管理成千上万台服务器. expect实现非交互式操作主要是在程序发出交互式询问时,按条件传递程序所需的 ...

  8. centos6.5和centos7.5统一字符集为zh_CN.UTF-8解决系统和MySQL数据库乱码问题

    linux的服务器需要做的操作 centos6.5下: 修改默认字符集为 zh_CN.UTF-8,如果没有中文语言包可能需要安装中文语言包支持 [root@meinv01 ~]# yum groupi ...

  9. 1282 - Leading and Trailing 求n^k的前三位和后三位。

    1282 - Leading and Trailing You are given two integers: n and k, your task is to find the most signi ...

  10. python 安装自己下载的whl依赖

    下载好之后保存到相应的地方,如下载了xxxx.whl文件并将它保存在D:\python\project目录下,然后 pip install  D:\python\project\xxxx.whl即可