SSLSocket实现服务端和客户端双向认证的例子

文章中最后提到使用keytool.exe的自签证书实现双向认证可以,但是使用ejbca生成证书实现SLL Socket的双向认证是服务端老是报错提示 null cert chain的错误。

当时花了一整天的时间研究都没有眉目,今天突然想到,cert chain,证书链,查看客户端或服务证书库中的证书,含有除了自身的私匙外还有一个CA的公匙,如下图所示:

终于明白了,原来要实现双向认证,使用keytool.exe工具的-export命令除需要导出自身的公匙证书外,还需要导出含CA公匙的证书。整个步骤也就如下:

1.使用EJBCA系统创建客户端实体,token为jks证书库形式(主题DN信息参考其他文章),在create key store菜单中输入用户名密码导出客户端证书库 ejbcaclient.jks;

2.使用EJBCA系统创建服务端实体,token为jks证书库形式,在create key store菜单中输入用户名密码导出服务端证书库 ejbcaserver.jks;

3.使用keytool.exe工具的-export命令分别导出含有客户端公匙的证书以及含有CA签发机构公匙的证书 sslclient.crt,sslclientca.crt;

4.使用keytool.exe工具的-export命令分别导出含有服务端公匙的证书以及含有CA签发机构公匙的证书 sslserver.crt,sslserverca.crt;

5.将客户端证书和颁发客户端证书的CA证书使用keytool.exe的-import命令导入至服务端证书库 ejbcaserver.jks,使服务端在通信时信任客户端,确认客户端的身份;

6.将服务端证书和颁发服务端证书的CA证书使用keytool.exe的-import命令导入至客户端证书库 ejbcaclient.jks,使客户端在通信时信任服务端,并确认服务端的身份;

7.代码编写SLLSocket通信demo测试双向认证。

注意:

1.如果使用EJBCA系统在颁发客户端和服务端证书的签发机构为同一个机构,则在导入通信双方证书时不需要导入含签发机构CA公匙的证书,因为证书库里面已经包含了此证书。

下面附上SSLSocket双向认证通信的简易测试代码。此代码中含 将服务端证书及CA证书自动导入到客户端证书库的功能。

SSLSocket双向认证通信示例(含证书库及证书).zip

关于使用由CA机构(EJBCA)颁发的证书实现SLLSocket双向认证服务端报null cert chain的解决方案的更多相关文章

  1. CA认证和颁发吊销证书

    摘要:涉及到网络安全这一块,想必大家都听过CA吧.像百度.淘宝.京东等这些知名网站,每年都要花费一笔money来买CA证书.但其实简单的企业内的CA认证,我们自己就可以实现,今天小编我就讲解一下怎么在 ...

  2. 如何在Windows中查询证书颁发机构已颁发的证书

    有时候需要看一下证书颁发机构已经颁发出去的证书,看看某个用户或者某个计算机获取过的证书有哪些.通常可以在证书颁发机构的MMC中查看.对于测试环境或者刚开始用的CA来说,这样查看挺简单的.但是对于用了一 ...

  3. 基于开源CA系统ejbca community 6.3.1.1构建私有CA管理数字证书

    最后更新于2017年01月24日 一.为什么 为什么写这篇文章?ca是什么?数字证书是什么?ejbca又是什么? 让我们从http与https说起.http是超文本传输协议(HyperText Tra ...

  4. 理解加密算法——创建CA机构,签发证书并开始TLS通信

    1 不安全的TCP通信 普通的TCP通信数据是明文传输的,所以存在数据泄露和被篡改的风险,我们可以写一段测试代码试验一下,NODE.JS代码: TCP Server: const net=requir ...

  5. [转帖] Linux 创建一个简单的私有CA、发证、吊销证书

    原创帖子地址:   https://blog.csdn.net/mr_rsq/article/details/71001810 Linux 创建一个简单的私有CA.发证.吊销证书 2017年04月30 ...

  6. 数字证书的理解以及自建CA机构颁发证书

    一.理解什么是数字证书   http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html    理解数字证书等概念,无数次想好好看 ...

  7. CA机构介绍(Certificate Authority 域名SSL证书颁发机构)

    SSL证书机构即CA机构的全称为Certificate Authority证书认证中心,只有通过WebTrust国际安全审计认证,根证书才能预装到主流浏览器,成为全球可信的ssl证书颁发机构. HTT ...

  8. nginx配置https双向验证(ca机构证书+自签证书)

    nginx配置https双向验证 服务端验证(ca机构证书) 客户端验证(服务器自签证书) 本文用的阿里云签发的免费证书实验,下载nginx安装ssl,文件夹有两个文件 这两个文件用于做服务器http ...

  9. CA机构及SSL证书

    互联网安全形势日趋严峻,企业重视自身互联网安全已成必然,SSL认证成大势所趋.要部署SSL证书最首先就是选好CA机构!其次选择适合自己的SSL证书!今天就来介绍一下如何选择CA机构及SSL证书! 首先 ...

随机推荐

  1. Multipart/form-data POST文件上传详解(转)

    Multipart/form-data POST文件上传详解 理论 简单的HTTP POST 大家通过HTTP向服务器发送POST请求提交数据,都是通过form表单提交的,代码如下: <form ...

  2. OC 语法基础一

    1.判断字符串开头 或 结尾 测试字符串是否以aString开始 - (BOOL)hasPrefix:(NSString *)aString; 测试字符串是否以aString结尾 - (BOOL)ha ...

  3. O2O领域添新军,正品网加快布局的战略考量

    前不久.正品网採购虚拟运营商30万170号码的招标公告引发了业界的广泛关注.一方面,虚拟运营商正处于"徘徊不定"的十字路口.据业内知情人士透露,眼下12家虚拟运营商企业共放号在20 ...

  4. Visual Studio使用技巧

    编程部分: 1.TODO:书签 打开之后返回上次工作的位置.让我们不再用脑子去记忆,去回顾刚刚工作到的部分. 操作非常easy.例如以下代码所看到的: public DataTable SelectB ...

  5. javascript高级知识点——闭包

    代码信息来自于http://ejohn.org/apps/learn/. 先给出一个权威的定义,函数对象可以通过作用域相互关联起来,函数体内的变量可以保存在函数的作用域内,这种特性称为闭包. 在闭包内 ...

  6. 关于FND_PROFILE与FND_GLOBLE[Z]

    fnd_global package可以取得一些關於當前login in用戶的信息 fnd_concurrent_requests functions   select FND_PROFILE.VAL ...

  7. C# - 自定义 DataSet 的使用

    -------------------------------------------------  SellProdectManager.cs  -------------------------- ...

  8. 实现ModelDriver接口的功能

    ModelDriver接口 来自com.opensymphony.xwork2.ModelDriven.是xwork-2.1.2-750.jar包的东西. 下面是源码: package com.ope ...

  9. (转)详解汇编系统调用过程(以printf为例)

    本文以printf为例,详细解析一个简单的printf调用里头,系统究竟做了什么,各寄存器究竟如何变化. 环境: linux + gnu as assembler + ld linker 如何在汇编调 ...

  10. querySelectorAll的BUG

    querySelector和querySelectorAll是W3C提供的新的查询接口 目前 IE8/9及Firefox/Chrome/Safari/Opera 的最新版已经支持它们. 但是Eleme ...