这两个星期真是被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. myeclipse 清理项目缓存的几大步骤

    http://blog.csdn.net/moneyshi/article/details/49247169 相信大家被项目缓存折腾过吧,这里罗列几条清除项目缓存的方法 1.项目清理: 选择菜单栏的P ...

  2. Delphi第一个入门程序——鼠标点击计数 - imsoft.cnblogs

    实现的效果如下: 制作要点: 添加一个按钮Button1和一个标签Label1,并双击按钮进入编程界面在var  Form1: TForm1;下面一行加上  n:integer;//定义变量. 然后在 ...

  3. Java基础类型与其二进制表示

    Java中的基础类型有:byte.short.int.long.float.double.char和boolean. 它们可被分为四种类型,整型.浮点型.char型和boolean型. 整型:byte ...

  4. 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred) G 优先队列

    G. Car Repair Shop time limit per test 2 seconds memory limit per test 512 megabytes input standard ...

  5. python3获取当前目录(转)

    转自:http://www.elias.cn/Python/GetPythonPath?from=Develop.GetPythonPath 1.  以前的方法 如果是要获得程序运行的当前目录所在位置 ...

  6. IE 下加载jQuery

    转:http://www.iitshare.com/ie8-not-use-native-json.html 解决在IE8中无法使用原生JSON的问题   起因 在项目中要将页面上的js对象传给后台, ...

  7. 黑马程序员——JAVA基础之语法、命名规则

    ------- android培训.java培训.期待与您交流! ---------- 1.java语言组成:关键字,标识符,注释,常量和变量,运算符,语句,函数,数组. 2.java关键字:被Jav ...

  8. 前端面试库_JS部分_02

    今天小编做了一个伟大的决定-----把我的初恋追回来.她在我心中一直是美好的,以前也人渣过,脑袋发热过,到了现在才真的是想有一个人陪伴着我,我与她约定晚些相见,我相信这个时间不会很久,虽然三年没有联系 ...

  9. Java OOM

    深入浅出JProfiler https://yq.aliyun.com/articles/276 如何排查Java内存泄露(内附各种排查工具介绍) https://yq.aliyun.com/arti ...

  10. Linux-同步异步非阻塞阻塞的解析

    一.理解同步.异步.阻塞.非阻塞 出场人物:老张,水壶两把(普通水壶,简称水壶:会响的水壶,简称响水壶). 1 老张把水壶放到火上,立等水开.(同步阻塞) 老张觉得自己有点傻. 2 老张把水壶放到火上 ...