OpenSSL进行SSL通讯的一些问题
这两个星期真是被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通讯的一些问题的更多相关文章
- ZeroC Ice启用SSL通讯的配置
Zeroc ICE ( Internet Communications Engine )中间件号称标准统一,开源,跨平台,跨语言,分布式,安全,服务透明,负载均衡,面向对象,性能优越,防火墙穿透,通讯 ...
- openssl生成ssl证书
openssl生成ssl证书 x509证书一般会用到三类文,key,csr,crt. Key 是私用密钥openssl格,通常是rsa算法. Csr 是证书请求文件,用于申请证书.在制作csr文件的时 ...
- OPENSSL生成SSL自签证书
OPENSSL生成SSL自签证书 目前,有许多重要的公网可以访问的网站系统(如网银系统)都在使用自签SSL证书,即自建PKI系统颁发的SSL证书,而不是部署支持浏览器的SSL证书. 支持浏览器的SSL ...
- 使用openssl生成SSL证书完全参考手册
一般来说,配置HTTPS/SSL的步骤为: 1.生成足够强度的私钥.需要考虑:算法,广泛采用的一般是RSA.键长度,RSA默认为512,一般应选择2048.密码,虽然私钥不一定要加密存储,但是加密存储 ...
- OpenSSL编写SSL,TLS程序***
一.简介 SSL(Secure Socket Layer)是netscape公司提出的主要用于web的安全通信标准,分为2.0版和3.0版.TLS(Transport Layer Security)是 ...
- 在libuv中使用openssl建立ssl连接
在libuv中使用openssl建立ssl连接 @(blogs) 使用openssl进行加密通信时,通常是先建立socket连接,然后使用SSL_XXX系列函数在普通socket之上建立安全连接,然后 ...
- 用openssl生成SSL使用的私钥和证书,并自己做CA签名(转)
本 文记叙的是一次基于SSL的socket通讯程序开发中,有关证书,签名,身份验证相关的步骤. 我们的场景下,socket服务端是java语言编写的,客户端是c语言.使用了一个叫做matrixssl的 ...
- OpenSSL 与 SSL 数字证书概念贴
SSL/TLS 介绍见文章 SSL/TLS原理详解(http://seanlook.com/2015/01/07/tls-ssl). 如果你想快速自建CA然后签发数字证书,请移步 基于OpenSSL自 ...
- openssl生成SSL证书的流程
SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socketlayer(SSL),SSL安全协议主要用来提供对用户和服务器的认证:对传送的数据进行加密和隐藏:确保数 ...
随机推荐
- 深入理解JavaScript闭包
Closure 闭包的定义1: <JavaScript高级程序设计>定义闭包:闭包是指有权访问另一个函数作用域中的变量的函数. 创建闭包的常见方式,就是在一个函数内部创建另一个函数. 然而 ...
- Debian 入门安装与配置1
Debian 入门安装与配置1 最近安装了多个发行版本的Linux,包括Ubuntu.Fedora.Centos和Debian,发现只有Debian在界面和稳定性等综合特性上表现最优,自己也最喜欢,所 ...
- PAT (Basic Level) Practise:1006. 换个格式输出整数
[题目链接] 让我们用字母B来表示“百”.字母S表示“十”,用“12...n”来表示个位数字n(<10),换个格式来输出任一个不超过3位的正整数.例如234应该被输出为BBSSS1234,因为它 ...
- codevs 1299 线段树 区间更新查询
1299 切水果 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 查看运行结果 题目描述 Description 简单的说,一共N个水果排成 ...
- SQLite 字段类型
一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断. SQLite具有以下五种数据类型: 1.NULL:空值. 2.INTEGER:带符号的整型,具体取决有存入 ...
- java List 排序 Collections.sort()
用Collections.sort方法对list排序有两种方法 第一种是list中的对象实现Comparable接口,如下: /** * 根据order对User排序 */ public class ...
- MySQL备份的shell脚本
经过测试该脚本可以远程备份,但需要配置远程登录用户的权限,经过测试啊,在把这个脚本添加到计划任务的时候是无法识别mysql命令的(即使是将mysql添加到环境变量也无法识别,是因为/etc/cront ...
- 用vi写一个C 程序
root@IdeaPad:~# ls 1.txt 3.txt 5.txt 6.py evilxr test 2.txt 4.txt 5.txt~ e.txt evilxr.txt root@IdeaP ...
- Java中相等测试
一:equals与==的区别 (1)基本数据类型 byte,short,char,int,long,float,double,boolean 此类数据类型的比较需要使用==,此时比较的是他们的值,若相 ...
- 1029c语言文法定义与c程序的推导过程
program → external_declaration | program external_declaration <源程序>→ <外部声明> | <源程序> ...