这两个星期真是被OpenSSL给烦透了,几个很简单基本的问题(如果没人告诉你真的很难测出来)把我搞的。。哎,有时候真是不知道自己该不该搞技术,发现自己头脑真是蠢得很。。。

直接上正题。

第一个问题:

前面讲过OpenSSL可以使用windows下的CAPI引擎(我也不太清楚是从哪个版本开始后就开始支持了,网上说是0.9.8i后),但是OpenSSL在windows下默认编译时是不会把它加入内嵌引擎的,所以我们要在编译时设置一些参数。。如果要使用CAPI引擎,我们要在编译源码时使用:

>perl Configure VC-WIN32 enable-capieng -DOPENSSL_SSL_CLIENT_ENGINE_AUTO=capi -DOPENSSL_CAPIENG_DIALOG(这个参数是需要客户端弹出证书选择窗口供用户选择合适证书时加上)(这里还会出现一个问题,如果windows证书库中只有一个合适的证书,这个证书选择框是不会出现的,OpenSSL会帮用户选择这唯一的一个合适证书,这个问题却纠结了我2天,当时证书库中只有一个合适的证书,在通讯时不出现证书选择框,我怎么就那么傻,在证书库中多放几个合适的证书呢,哎。。弱智啊)

>ms/do_ms

>nmake -f ms/ntdll.mak

后两步基本和默认编译是一样的。

第二个问题:

这两天想在SSL通讯服务器端使用多线程,网上示例程序基本都是那个,应该是从OpenSSL源码中抽出来的。这个例子中服务器端和客户端都是使用多线程,这个例子确实很好。但是我开始却没发现它的优点,我一直认为服务器端确实需要多线程,但是客户端为什么要多线程呢?确实,客户端不需要多线程,但是这里客户端作为一个测试程序,必须要使用多线程,不然你如何模拟服务器同时对多个客户端的处理呢。。是吧。但是我为什么在这个地方纠结了很久呢,是因为我使用一个单线程的客户端程序和一个多线程的服务器端通讯时,出现了错误,错误代码为(OPENSSL_Uplink<...(前面这个数字忘记了),08>),当时在网上根据错误代码搜索解决方案,真是个难啊,好像这世界上就只有我一个人遇到这样的问题了一样,哎。。

但是网上类似的错误也有很多,但是和我这个错误不一样,所以它提供的方法基本无效,那么我到底遇到的是什么问题了,后来根据网上一个解决方案,在预处理头文件前面加上

#include <openssl/applink.c> //如果遇到此类问题,先把这个头文件加上去

这句话我也不知道有啥用,加上后,显示的错误竟然变了,显示是version number号不对,那我就版本进行核对,这确实发现了一个大问题,客户端使用的是TLS1,而服务器端使用的是SSL3,后来把版本改为一样的,就通过了,不再报错了。

看到这些问题,我真是汗颜啊~~

希望对遇到同样问题的童鞋们有帮助,在此记录之!

OpenSSL进行SSL通讯的一些问题的更多相关文章

  1. ZeroC Ice启用SSL通讯的配置

    Zeroc ICE ( Internet Communications Engine )中间件号称标准统一,开源,跨平台,跨语言,分布式,安全,服务透明,负载均衡,面向对象,性能优越,防火墙穿透,通讯 ...

  2. openssl生成ssl证书

    openssl生成ssl证书 x509证书一般会用到三类文,key,csr,crt. Key 是私用密钥openssl格,通常是rsa算法. Csr 是证书请求文件,用于申请证书.在制作csr文件的时 ...

  3. OPENSSL生成SSL自签证书

    OPENSSL生成SSL自签证书 目前,有许多重要的公网可以访问的网站系统(如网银系统)都在使用自签SSL证书,即自建PKI系统颁发的SSL证书,而不是部署支持浏览器的SSL证书. 支持浏览器的SSL ...

  4. 使用openssl生成SSL证书完全参考手册

    一般来说,配置HTTPS/SSL的步骤为: 1.生成足够强度的私钥.需要考虑:算法,广泛采用的一般是RSA.键长度,RSA默认为512,一般应选择2048.密码,虽然私钥不一定要加密存储,但是加密存储 ...

  5. OpenSSL编写SSL,TLS程序***

    一.简介 SSL(Secure Socket Layer)是netscape公司提出的主要用于web的安全通信标准,分为2.0版和3.0版.TLS(Transport Layer Security)是 ...

  6. 在libuv中使用openssl建立ssl连接

    在libuv中使用openssl建立ssl连接 @(blogs) 使用openssl进行加密通信时,通常是先建立socket连接,然后使用SSL_XXX系列函数在普通socket之上建立安全连接,然后 ...

  7. 用openssl生成SSL使用的私钥和证书,并自己做CA签名(转)

    本 文记叙的是一次基于SSL的socket通讯程序开发中,有关证书,签名,身份验证相关的步骤. 我们的场景下,socket服务端是java语言编写的,客户端是c语言.使用了一个叫做matrixssl的 ...

  8. OpenSSL 与 SSL 数字证书概念贴

    SSL/TLS 介绍见文章 SSL/TLS原理详解(http://seanlook.com/2015/01/07/tls-ssl). 如果你想快速自建CA然后签发数字证书,请移步 基于OpenSSL自 ...

  9. openssl生成SSL证书的流程

    SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socketlayer(SSL),SSL安全协议主要用来提供对用户和服务器的认证:对传送的数据进行加密和隐藏:确保数 ...

随机推荐

  1. 八、CCMenu和CCMenuItem

    游戏中经常会提供一些菜单项让用户开始游戏.暂停\继续游戏.打开\关闭音乐或者是返回到上一个界面,比如下面两张图中用红色线框标记的菜单项     我们可以使用CCMenu和CCMenuItem实现上述的 ...

  2. 文件夹差异文件对比工具 meld

    /***************************************************************************************** * 文件夹差异文件 ...

  3. NetSetMan IP地址切换工具

    http://www.netsetman.com/en/freeware NetSetMan NetSetMan是一个网络设置管理器,它可以很容易在6种不同的,视觉结构化的配置之间切换,包括: IP地 ...

  4. 解决Eclipse Pydev中import时报错:Unresolved import

    在安装 图像处理工具包 mahotas 后,在eclipse中尝试import mahotas时,出现Unresolved import错误,按快捷无法自动生成代码提示 但是,程序运行时可以通过,在命 ...

  5. href="#"与javascript:void(0)的区别

    共同点:都是一个空链接. 不同点:所以,#与javascript:void(0)的区别也很明显,#方法会跳转到页面的顶部,并且在页面URL后面会出现#,而javascript:void(0)方法不会, ...

  6. H5标签-canvas实现颜色拾取功能

    HTML5 <canvas> 标签是用于绘制图像,不过,<canvas> 元素本身并没有绘制能力(它仅仅是图形的容器),必须使用脚本(通常是 JS)来完成实际的绘图任务. &l ...

  7. spark优化之优化数据结构

    概序: 要减少内存的消耗,除了使用高效的序列化类库以外,还有一个很重要的事情,就是优化数据结构.从而避免Java语法特性中所导致的额外内存的开销,比如基于指针的Java数据结构,以及包装类型. 有一个 ...

  8. Python爬虫学习笔记——豆瓣登陆(二)

    昨天能够登陆成功,但是不能使用cookies,今天试了一下requests库的Session(),发现可以保持会话了,代码只是稍作改动. #-*- coding:utf-8 -*- import re ...

  9. 【Unity3D基础教程】给初学者看的Unity教程(六):理解Unity的新GUI系统(UGUI)

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点推荐.谢谢! 理解UGUI的基础架构 UGUI是Unity在4 ...

  10. Linux进程间通信-命名管道

    前面我们讲了进程间通信的一种方式,匿名管道.我们知道,匿名管道只能用于父子关系的进程之间.那么没有这种关系的进程之间该如何进行数据传递呢? 1.什么是命名管道 匿名管道是在缓存中开辟的输出和输入文件流 ...