`

c++和java的双向SSL

阅读更多
1, 建立一个新的目录,把OPENSSL下的CA.sh和openssl.cnf copy到新目录下,然后执行
#CA.sh –newca  

cacert.pem作为根证书来使用。
2, 用openssl建立C++ client端的私钥+公钥签名:
openssl req -newkey rsa:1024 -out serverreq.pem -keyout Clientkey.pem

输入Common Name的时候最好不要和CA证书一致,这里叫的是Boris1
3, 用CA私钥为C++ client端的公钥
openssl ca –in ./demoCA/serverreq.pem –out ./demoCA/clientcert.pem

这里所生成的clientcert.pem是经过ca签名的证书。


4, 生成客户端私钥并存入osbserver.jks
keytool -genkey -alias osbserver -validity 365 -keyalg RSA -keysize 1024 -keystore osbserver.jks -keypass 123456 –storepass 123456


5, 从osbserver.jks中提取服务器端签名请求
keytool -certreq -alias osbserver -sigalg SHA1withRSA -file osbserver.csr -keypass 123456 -storepass 123456 -keystore osbserver.jks

6,用CA私钥为客户端请求签名生成服务器端证书

openssl ca -in demoCA/java/osbserver.csr -out osbserver.crt -cert demoCA/cacert.pem -keyfile demoCA/private/cakey.pem –notext

上边这行命令的执行目录自己改下。
Osbserver.crt为经过签名的服务器端证书.
7,转化服务器端证书的格式。
openssl x509 -in osbserver.crt -out osbserver.der -outform DER 

8,转化根证书的格式
openssl x509 -in cacert.pem -out cacert.der -outform DER 

9,将转化后的根证书导入到keystore
keytool -import -v -trustcacerts -alias ca_root -file ..\cacert.der -storepass 123456 -keystore osbserver.jks
10,将经过签名的服务器证书导入到服务器的keystore中。
keytool -import -v -alias osbserver -file osbserver.der -storepass 123456 -keystore osbserver.jks

11,创建一个truststore,并导入der格式的根证书
keytool -import -alias ca_root -file cacert.der -keystore osbtrust.jks

12,将c client签名后的的证书转化为der格式
openssl x509 -in clientcert.pem -out clientcert.der -outform DER

13,把c client签名后的der格式证书导入到truststore中
keytool -import -alias c_client -file ../clientcert.der -keystore osbtrust.jks


这样就完成了,C++ client需要用到的是
cacert.pem ,clientcert.pem,Clientkey.pem
osb用到的是:osbserver.jks ,osbtrust.jks


以上命令的路径应根据实际情况输入。
























1
0
分享到:
评论

相关推荐

    客户端与服务器SSL双向认证(客户端:java-服务端:vc)

    在Java客户端和VC(Visual C++)服务器之间实现SSL双向认证涉及以下几个关键步骤: 1. **证书准备**: - **服务器证书**:服务器需要一个由受信任的证书颁发机构(CA)签发的数字证书,包含服务器的公钥和身份信息...

    安卓访问C++服务器

    本文将深入探讨如何实现"安卓访问C++服务器"这一主题,结合Java(Android)客户端和C++服务器端的核心知识点。 1. **Java Socket编程**:在Android客户端,我们主要使用Java的Socket类来建立与服务器的连接。Socket...

    java版 qq 支持视频

    Java的`java.net`包提供了Socket和ServerSocket类,用于建立客户端和服务端的连接,实现数据的双向传输。 3. **多线程** 在Java版QQ中,为了保证用户体验,通常会采用多线程技术来处理并发任务。例如,一个线程...

    java socket 源码

    对于安全通信,Java 提供了 `SSLSocket` 类,它基于 SSL/TLS 协议,提供加密和身份验证功能。`SSLSocket` 在 `Socket` 的基础上增加了握手过程和证书管理。 10. **Socket 选项** Socket 还允许设置各种选项,例如...

    grpc源代码和相对应的代码示例

    GRPC 是一个高性能、开源和通用的 RPC (远程过程调用) 框架,它基于 HTTP/2 协议标准设计,支持多种语言,包括 C++, Java, Python, Go, Node.js, C#, Ruby 等。GRPC 的核心是 Protobuf(Protocol Buffers),这是一...

    计算机软件-编程源码-CS双向交流信息.zip

    这个压缩包中的源码可能是用各种编程语言实现的,如C++、Java、Python或JavaScript等,具体取决于开发者的偏好和技术栈。通过研究这些源码,学习者可以深入理解软件开发的各个环节,提升自己的编程技能。

    JAVA程序员面试经验.pdf,这是一份不错的文件

    3. **内存管理**:对比Java与C++在内存管理上的差异,Java采用垃圾回收机制,而C++需要程序员手动管理内存,理解垃圾回收的工作原理和内存泄漏的概念。 4. **多线程**:Java的并发编程是面试重点,理解线程的创建、...

    apche-apollo

    8. **API 支持**:提供了多种语言的客户端库,如 Java、Python、C++、Node.js 等,方便开发者集成到各种应用中。 9. **社区活跃**:作为 Apache 软件基金会的项目,Apollo 拥有一个活跃的开发社区,持续更新和改进...

    (Javawork Programming) Elliotte Rusty Harold

    相比于C或C++等语言,在Java中编写网络程序更加容易,因为Java提供了更为高级的抽象层,使得开发人员无需关注底层细节即可完成复杂的网络编程任务。 #### 三、Java网络编程的关键技术 1. **Socket编程**:这是Java...

    tcpipserverclient

    在编程实现上,这个项目可能使用了如C++、Python、Java等语言,利用它们的网络编程库,例如C++的boost.asio,Python的socket模块,或者Java的java.net.Socket和ServerSocket类。这些库提供了方便的API来创建和管理...

    远程聊天识

    1. **Java基础知识**:Java是一种面向对象的、类C++语法的编程语言,由Sun Microsystems(现已被Oracle收购)于1995年推出。它的设计目标是“一次编写,到处运行”,这得益于Java虚拟机(JVM)的存在,使得Java代码...

    Remote Call Function库

    Remote Call Function(RCF)库是一个C++编写的库,其设计目的是为了简化分布式系统中的远程方法调用(Remote Method Invocation),类似于Java中的RMI(Remote Method Invocation)机制。RCF库是CORBA(Common ...

    GRPC-DLL.rar

    5. **流式RPC**:除了基本的请求-响应模式,gRPC还支持双向流,即客户端和服务器可以同时发送一系列消息,这在实时数据传输或长轮询场景中非常有用。 6. **跨平台性**:gRPC支持多种编程语言,如C++, Java, Python,...

    Android应用与framework的socket通信实例

    为了在Java和原生代码之间传递Socket句柄,你可以使用`jobject`和`jfieldID`来存储和访问Java对象。在原生代码中,使用`env->GetObjectField()`和`env->SetObjectField()`来获取和设置Java对象的字段值,从而操作...

    超级有影响力霸气的Java面试题大全文档

     JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要...

    Socket长连接+心跳包+发送读取

    1. **TCP连接**:Socket基于传输层的TCP协议,提供可靠的双向通信。TCP保证了数据的顺序和完整性,通过三次握手建立连接,四次挥手断开连接。 2. **Socket对象**:在Java等语言中,Socket类代表一个网络连接,...

    客户端管理服务器文件

    1. **Socket编程**:理解TCP/IP协议,熟悉Java、Python、C++等语言中的Socket库,如何创建Socket、绑定端口、监听连接、接受连接以及收发数据。 2. **文件I/O操作**:在服务器端,需要熟悉文件系统的API,了解如何...

    clsocket.zip

    在Android平台上进行网络通信时,Socket是一个至关重要的组件,它允许应用程序通过TCP/IP协议与远程服务器进行双向数据传输。这个"clsocket.zip"文件显然包含了关于如何在Android应用中使用Socket,尤其是结合Native...

    flex socket开发总结

    本文将深入探讨Flex中Socket开发的关键知识点,包括如何连接到Java和C++的Server Socket,以及在实际应用中的注意事项。 1. Flex Socket API Flex SDK提供了一个名为`flash.net.Socket`的类,它允许我们创建客户端...

Global site tag (gtag.js) - Google Analytics