zoukankan      html  css  js  c++  java
  • 关于使用由CA机构(EJBCA)颁发的证书实现SLLSocket双向认证服务端报null cert chain的解决方案

    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

  • 相关阅读:
    Graph 学习
    忘记 mysql 8.0 root 密码 怎么修改
    HTML字符实体(关于 ><等)
    Sqlserver 中系统表sysobjects、syscolumns以及函数object_id
    SQL Server创建索引(转)
    改善SQL语句(转)
    (转)SqlServer索引及优化详解(1)
    标签点击不返回顶部和不刷新页面方法
    c#模拟js escape方法
    获取枚举描述信息
  • 原文地址:https://www.cnblogs.com/franson-2016/p/5563599.html
Copyright © 2011-2022 走看看