openssl 介绍(三)在openssl中定义新的格式

Openssl 的 ASN.1 宏

Openssl 中的 ASN.1 宏用来定义某种内部数据结构以及这种结构如何编码,部分宏
定义说明如下:

  1. DECLARE_ASN1_FUNCTIONS
    用于声明一个内部数据结构的四个基本函数,一般可以在头文件中定义。
  2. IMPLEMENT_ASN1_FUNCTIONS
    用于实现一个数据结构的四个基本函数。
    3) ASN1_SEQUENCE
    用于 SEQUENCE,表明下面的编码是一个 SEQUENCE。
  3. ASN1_CHOICE
    表明下面的编码是选择其中一项,为 CHOICE 类型。
    5) ASN1_SIMPLE
    用于简单类型或结构类型,并且是必须项。
  4. ASN1_OPT
    用于可选项,表明 asn.1 语法中,本项是可选的。
  5. ASN1_EXP_OPT
    用于显示标记,表明 asn.1 语法中,本项是显示类型,并且是可选的;
  6. ASN1_EXP
    用于显示标记,表明 asn.1 语法中,本项是显示标记。
    9) ASN1_IMP_SEQUENCE_OF_OPT
    用于隐示标记,表明 asn.1 语法中,本项是一个 SEQUENCE 序列,为隐
    示类型,并且是可选的。
  7. ASN1_IMP_OPT
    用于隐示标记,表明 asn.1 语法中,本项是隐示类型,并且是可选的。
  8. ASN1_IMP
    用于隐示标记,表明 asn.1 语法中,本项是隐示类型。
  9. ASN1_SEQUENCE_END
    用于 SEQUENCE 结束。
  10. ASN1_CHOICE_END
    用于结束 CHOICE 类型。
步骤:

当采用 Openssl 的 ASN.1 库编码一个 asn.1 定义的结构的时候,需要采用如下步骤:

  1. 用 ASN.1 语法定义内部数据结构,并声明函数;
    所谓内部数据结构, 指的是 Openssl 中用基本的数据类型按照 ASN.1 语法定义的其他的数据结构,这种数据结构可以方便的用于编解码。
    以 x509v4 中的证书有效期为例,证书有效期定义如下:

    AttCertValidityPeriod ::= SEQUENCE
    {
    notBeforeTime GeneralizedTime,
    notAfterTime GeneralizedTime
    }
    所以我们可以定义相应的内部数据结构,如下:
    typedef struct X509V4_VALID_st
    {
    ASN1_GENERALIZEDTIME *notBefore;
    ASN1_GENERALIZEDTIME *notAfter;
    }X509V4_VALID;
    DECLARE_ASN1_FUNCTIONS(X509V4_VALID)

其中最后一行用于定义四个函数:

X509V4_VALID *X509V4_VALID_new(void);
void *X509V4_VALID_free(X509V4_VALID *a);
X509V4_VALID *d2i_ASN1_INTEGER(X509V4_VALID **a,unsigned char
**in,long len);
int i2d_ X509V4_VALID (X509V4_VALID *a,unsigned char **out);
  1. 实现内部数据结构的四个基本函数
    实现内部数据结构的基本函数,是通过一系列的宏来实现的。定义的模式如下,以
    属性证书有效期为例,如下

    /* X509V4_VALID */
    ASN1_SEQUENCE(X509V4_VALID) =
    {
    ASN1_SIMPLE(X509V4_VALID, notBefore, ASN1_GENERALIZEDTIME),
    ASN1_SIMPLE(X509V4_VALID, notAfter, ASN1_GENERALIZEDTIME)
    } ASN1_SEQUENCE_END(X509V4_VALID)
    IMPLEMENT_ASN1_FUNCTIONS(X509V4_VALID)

这样通过宏就实现了一个 asn.1 定义结构的最基本的四个函数。
本例有五个宏,采用什么样的宏,与数据结构的 asn.1 定义相关。

测试代码:

#include <openssl/asn1.h>
#include <openssl/asn1t.h>
#include <openssl/conf.h>
#include <string.h>
typedef struct X509V4_VALID_st
{
ASN1_GENERALIZEDTIME *notBefore;
ASN1_GENERALIZEDTIME *notAfter;
}X509V4_VALID;
DECLARE_ASN1_FUNCTIONS(X509V4_VALID)

ASN1_SEQUENCE(X509V4_VALID) = {
ASN1_SIMPLE(X509V4_VALID, notBefore, ASN1_GENERALIZEDTIME),
ASN1_SIMPLE(X509V4_VALID, notAfter, ASN1_GENERALIZEDTIME)
} ASN1_SEQUENCE_END(X509V4_VALID)
IMPLEMENT_ASN1_FUNCTIONS(X509V4_VALID)

int main(int argc, char const *argv[])
{
    int len=0;
    char *der;char *p;
    unsigned char buf[50] = "abcd";
    FILE *fp;
    //ASN1_GENERALIZEDTIME *t = ASN1_GENERALIZEDTIME_new();
    ASN1_GENERALIZEDTIME t;
    t.type = V_ASN1_GENERALIZEDTIME;
    t.length = strlen(buf);
    t.data = (unsigned char *)buf;
    X509V4_VALID *v4 = X509V4_VALID_new();
    v4->notAfter = &t;
    v4->notBefore = &t;
    len= i2d_X509V4_VALID(v4,NULL);
    der=(char *)malloc(len);
    p = der;
    len=i2d_X509V4_VALID(v4,(unsigned char **)&p);
	fp=fopen("v4.cer","rw");
	fwrite(der,1,len,fp);
    fclose(fp);
	//X509V4_VALID_free(v4);
	free(der);
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一章 基础知识 81.1 对称算法 81.2摘要算法 81.3 公钥算法 91.4 回调函数 11第二章 openssl 132.1 openssl 132.2 openssl安装 132.2.1 linux下的安装 132.2.2 windows编译与安装 132.3 openssl源代码 142.4 openssl学习方法 16第三章openssl堆栈 173.1 openssl堆栈 173.2 数据结构 173.3 源码 173.4 定义用户自己的堆栈函数 183.5 编程示例 19第四章 openssl哈希表 214.1 哈希表 214.2 哈希表数据结构 214.3 函数说明 224.4 编程示例 24第五章 openssl内存分配 275.1 openssl内存分配 275.2 内存数据结构 275.3 主要函数 285.4 编程示例 28第六章 Openssl动态模块加载 316.1 动态库加载 316.2 DSO概述 316.3 数据结构 316.4 编程示例 32第七章 openssl抽象IO 357.1 openssl抽象IO 357.2 数据结构 357.3 BIO 函数 367.4 编程示例 377.4.1 mem bio 377.4.2 file bio 377.4.3 socket bio 387.4.4 md BIO 407.4.5 cipher BIO 407.4.6 ssl BIO 417.4.7 其他示例 43第八章 Openssl配置文件 448.1 概述 448.2 openssl配置文件读取 448.3 主要函数 448.4 编程示例 45第九章 Openssl随机数 479.1 随机数 479.2 openssl随机数数据结构与源码 479.3 主要函数 489.4 编程示例 49第十章 Openssl文本数据库 5110.1 概述 5110.2 数据结构 5110.3 函数说明 5210.4 编程示例 52第十一章 Openssl大数 5511.1 5511.2 openssl大数表示 5511.3 大数函数 5511.4 使用示例 58第十二章 Openssl base64编解码 6512.1 BASE64编码 6512.2 BASE64编解码原理 6512.3 主要函数 6612.4 编程示例 66第十三章 Openssl ASN1库 6913.1 ASN1简 6913.2 DER编码 7013.3 ASN1基本类型示例 7113.4 openssl 的ASN.1库 7313.5 用openssl的ASN.1库DER编码 7413.6 Openssl的ASN.1宏 7513.7 ASN1常用函数 7613.8 属性证书编码 90第十四章 Openssl错误处理 9414.1 概述 9414.2 数据结构 9414.3 主要函数 9614.4 编程示例 98第十五章 Openssl摘要与HMAC 10115.1 概述 10115.2 openssl摘要实现 10115.3 函数说明 10115.4 编程示例 10215.5 HMAC 103第十六章 Openssl数据压缩 10516.1 简 10516.2 数据结构 10516.3 函数说明 10616.4 openssl压缩算法协商 10616.5 编程示例 107第十七章 Openssl RSA 10817.1 RSA 10817.2 openssl的RSA实现 10817.3 RSA签名与验证过程 10917.4 数据结构 10917.4.1 RSA_METHOD 10917.4.2 RSA 11017.5 主要函数 11117.6编程示例 11217.6.1密钥生成
openssl-1.0.0a源代码  SSL是Secure Socket Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准,目前已有3.0版本。SSL采用公开密钥技术。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。目前,利用公开密钥技术的SSL协议,已成为Internet上保密通讯的工业标准。安全套接层协议能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。通过以上叙述,SSL协议提供的安全信道有以下三个特性: 1.数据的保密性 信息加密就是把明码的输入文件用加密算法转换成加密的文件以实现数据的保密。加密的过程需要用到密钥来加密数据然后再解密。没有了密钥,就无法解开加密的数据。数据加密之后,只有密钥要用一个安全的方法传送。加密过的数据可以公开地传送。 2.数据的一致性 加密也能保证数据的一致性。例如:消息验证码(MAC),能够校验用户提供的加密信息,接收者可以用MAC来校验加密数据,保证数据在传输过程没有被篡改过。 3.安全验证 加密的另外一个用途是用来作为个人的标识,用户的密钥可以作为他的安全验证的标识。SSL是利用公开密钥的加密技术(RSA)来作为用户端与服务器端在传送机密资料时的加密通讯协定。   什么是OpenSSL    众多的密码算法、公钥基础设施标准以及SSL协议,或许这些有趣的功能会让你产生实现所有这些算法和标准的想法。果真如此,在对你表示敬佩的同时,还是忍不住提醒你:这是一个令人望而生畏的过程。这个工作不再是简单的读懂几本密码学专著和协议文档那么简单,而是要理解所有这些算法、标准和协议文档的每一个细节,并用你可能很熟悉的C语言字符一个一个去实现这些定义和过程。我们不知道你将需要多少时间来完成这项有趣而可怕的工作,但肯定不是一年两年的问题。   首先,应该感谢Eric A. Young和Tim J. Hudson,他们自1995年开始编写后来具有巨大影响的OpenSSL软件包,更令我们高兴的是,这是一个没有太多限制的开放源代码的软件包,这使得我们可以利用这个软件包做很多事情。Eric A. Young 和Tim J. Hudson是加拿大人,后来由于写OpenSSL功成名就之后就到大公司里赚大钱去了。1998年,OpenSSL项目组接管了OpenSSL的开发工作,并推出了OpenSSL的0.9.1版,到目前为止,OpenSSL的算法已经非常完善,对SSL2.0、SSL3.0以及TLS1.0都支持。   OpenSSL采用C语言作为开发语言,这使得OpenSSL具有优秀的跨平台性能,这对于广大技术人员来说是一件非常美妙的事情,可以在不同的平台使用同样熟悉的东西。OpenSSL支持Linux、Windows、BSD、Mac、VMS等平台,这使得OpenSSL具有广泛的适用性。不过,对于目前成长起来的C++程序员,可能对于C语言的代码不是很习惯,但习惯C语言总比使用C++重写一个跟OpenSSL相同功能的软件包轻松不少。   OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。   作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。 [编辑本段]对称加密算法   OpenSSL一共提供了8种对称加密算法,其7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。 [编辑本段]非对称加密算法   OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用户密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。 [编辑本段]信息摘要算法   OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA算法事实上包括了SHA和SHA1两种信息摘要算法,此外,OpenSSL还实现了DSS标准规定的两种信息摘要算法DSS和DSS1。 [编辑本段]密钥和证书管理   密钥和证书管理是PKI的一个重要组成部分,OpenSSL为之提供了丰富的功能,支持多种标准。   首先,OpenSSL实现了ASN.1的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以及CRL等数据对象的DER、PEM和BASE64的编解码功能。OpenSSL提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥的DER编解码功能。并实现了私钥的PKCS#12和PKCS#8的编解码功能。OpenSSL在标准提供了对私钥的加密保护功能,使得密钥可以安全地进行存储和分发。   在此基础上,OpenSSL实现了对证书的X.509标准编解码、PKCS#12格式的编解码以及PKCS#7的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。   事实上,OpenSSL提供的CA应用程序就是一个小型的证书管理心(CA),实现了证书签发的整个流程和证书管理的大部分机制。   5.SSL和TLS协议   OpenSSL实现了SSL协议的SSLv2和SSLv3,支持了其绝大部分算法协议。OpenSSL也实现了TLSv1.0,TLS是SSLv3的标准化版,虽然区别不大,但毕竟有很多细节不尽相同。   虽然已经有众多的软件实现了OpenSSL的功能,但是OpenSSL里面实现的SSL协议能够让我们对SSL协议有一个更加清楚的认识,因为至少存在两点:一是OpenSSL实现的SSL协议是开放源代码的,我们可以追究SSL协议实现的每一个细节;二是OpenSSL实现的SSL协议是纯粹的SSL协议,没有跟其它协议(如HTTP)协议结合在一起,澄清了SSL协议的本来面目。 [编辑本段]应用程序   OpenSSL的应用程序已经成为了OpenSSL重要的一个组成部分,其重要性恐怕是OpenSSL的开发者开始没有想到的。现在OpenSSL的应用,很多都是基于OpenSSL的应用程序而不是其API的,如OpenCA,就是完全使用OpenSSL的应用程序实现的。OpenSSL的应用程序是基于OpenSSL的密码算法库和SSL协议库写成的,所以也是一些非常好的OpenSSL的API使用范例,读懂所有这些范例,你对OpenSSL的API使用了解就比较全面了,当然,这也是一项锻炼你的意志力的工作。   OpenSSL的应用程序提供了相对全面的功能,在相当多的人看来,OpenSSL已经为自己做好了一切,不需要再做更多的开发工作了,所以,他们也把这些应用程序成为OpenSSL的指令。OpenSSL的应用程序主要包括密钥生成、证书管理、格式转换、数据加密和签名、SSL测试以及其它辅助配置功能。   7.Engine机制 Engine机制的出现是在OpenSSL的0.9.6版的事情,开始的时候是将普通版本跟支持Engine的版本分开的,到了OpenSSL的0.9.7版,Engine机制集成到了OpenSSL的内核,成为了OpenSSL不可缺少的一部分。 Engine机制目的是为了使OpenSSL能够透明地使用第三方提供的软件加密库或者硬件加密设备进行加密。OpenSSL的Engine机制成功地达到了这个目的,这使得OpenSSL已经不仅仅使一个加密库,而是提供了一个通用地加密接口,能够与绝大部分加密库或者加密设备协调工作。当然,要使特定加密库或加密设备更OpenSSL协调工作,需要写少量的接口代码,但是这样的工作量并不大,虽然还是需要一点密码学的知识。Engine机制的功能跟Windows提供的CSP功能目标是基本相同的。目前,OpenSSL的0.9.7版本支持的内嵌第三方加密设备有8种,包括:CryptoSwift、nCipher、Atalla、Nuron、UBSEC、Aep、SureWare以及IBM 4758 CCA的硬件加密设备。现在还出现了支持PKCS#11接口的Engine接口,支持微软CryptoAPI的接口也有人进行开发。当然,所有上述Engine接口支持不一定很全面,比如,可能支持其一两种公开密钥算法。 [编辑本段]辅助功能   BIO机制是OpenSSL提供的一种高层IO接口,该接口封装了几乎所有类型的IO接口,如内存访问、文件访问以及Socket等。这使得代码的重用性大幅度提高,OpenSSL提供API的复杂性也降低了很多。   OpenSSL对于随机数的生成和管理也提供了一整套的解决方法和支持API函数。随机数的好坏是决定一个密钥是否安全的重要前提。   OpenSSL还提供了其它的一些辅助功能,如从口令生成密钥的API,证书签发和管理的配置文件机制等等。如果你有足够的耐心,将会在深入使用OpenSSL的过程慢慢发现很多这样的小功能,让你不断有的惊喜。
第一章 基础知识 8<br>1.1 对称算法 8<br>1.2摘要算法 8<br>1.3 公钥算法 9<br>1.4 回调函数 11<br>第二章 openssl 13<br>2.1 openssl 13<br>2.2 openssl安装 13<br>2.2.1 linux下的安装 13<br>2.2.2 windows编译与安装 13<br>2.3 openssl源代码 14<br>2.4 openssl学习方法 16<br>第三章openssl堆栈 17<br>3.1 openssl堆栈 17<br>3.2 数据结构 17<br>3.3 源码 17<br>3.4 定义用户自己的堆栈函数 18<br>3.5 编程示例 19<br>第四章 openssl哈希表 21<br>4.1 哈希表 21<br>4.2 哈希表数据结构 21<br>4.3 函数说明 22<br>4.4 编程示例 24<br>第五章 openssl内存分配 27<br>5.1 openssl内存分配 27<br>5.2 内存数据结构 27<br>5.3 主要函数 28<br>5.4 编程示例 28<br>第六章 Openssl动态模块加载 31<br>6.1 动态库加载 31<br>6.2 DSO概述 31<br>6.3 数据结构 31<br>6.4 编程示例 32<br>第七章 openssl抽象IO 35<br>7.1 openssl抽象IO 35<br>7.2 数据结构 35<br>7.3 BIO 函数 36<br>7.4 编程示例 37<br>7.4.1 mem bio 37<br>7.4.2 file bio 37<br>7.4.3 socket bio 38<br>7.4.4 md BIO 40<br>7.4.5 cipher BIO 40<br>7.4.6 ssl BIO 41<br>7.4.7 其他示例 43<br>第八章 Openssl配置文件 44<br>8.1 概述 44<br>8.2 openssl配置文件读取 44<br>8.3 主要函数 44<br>8.4 编程示例 45<br>第九章 Openssl随机数 47<br>9.1 随机数 47<br>9.2 openssl随机数数据结构与源码 47<br>9.3 主要函数 48<br>9.4 编程示例 49<br>第十章 Openssl文本数据库 51<br>10.1 概述 51<br>10.2 数据结构 51<br>10.3 函数说明 52<br>10.4 编程示例 52<br>第十一章 Openssl大数 55<br>11.1 55<br>11.2 openssl大数表示 55<br>11.3 大数函数 55<br>11.4 使用示例 58<br>第十二章 Openssl base64编解码 65<br>12.1 BASE64编码 65<br>12.2 BASE64编解码原理 65<br>12.3 主要函数 66<br>12.4 编程示例 66<br>第十三章 Openssl ASN1库 69<br>13.1 ASN1简 69<br>13.2 DER编码 70<br>13.3 ASN1基本类型示例 71<br>13.4 openssl 的ASN.1库 73<br>13.5 用openssl的ASN.1库DER编码 74<br>13.6 Openssl的ASN.1宏 75<br>13.7 ASN1常用函数 76<br>13.8 属性证书编码 90<br>第十四章 Openssl错误处理 94<br>14.1 概述 94<br>14.2 数据结构 94<br>14.3 主要函数 96<br>14.4 编程示例 98<br>第十五章 Openssl摘要与HMAC 101<br>15.1 概述 101<br>15.2 openssl摘要实现 101<br>15.3 函数说明 101<br>15.4 编程示例 102<br>15.5 HMAC 103<br>第十六章 Openssl数据压缩 105<br>16.1 简 105<br>16.2 数据结构 105<br>16.3 函数说明 106<br>16.4 openssl压缩算法协商 106<br>16.5 编程示例 107<br>第十七章 Openssl RSA 108<br>17.1 RSA 108<br>17.2 openssl的RSA实现 108<br>17.3 RSA签名与验证过程 109<br>17.4 数据结构 109<br>17.4.1 RSA_METHOD 109<br>17.4.2 RSA 110<br>17.5 主要函数 111<br>17.6编程示例 112<br>17.6.1密钥生成 112<br>17.6.2 RSA加解密运算 114<br>17.6.3签名与验证 117<br>第十八章 Openssl DSA 120<br>18.1 DSA简 120<br>18.2 openssl的DSA实现 120<br>18.3 DSA数据结构 121<br>18.4 主要函数 122<br>18.5 编程示例 123<br>18.5.1密钥生成 123<br>18.5.2签名与验证 124<br>第十九章Openssl DH 127<br>19.1 DH算法 127<br>19.2 openssl的DH实现 127<br>19.3数据结构 128<br>19.4 主要函数 129<br>19.5 编程示例 130<br>第二十章 Openssl椭圆曲线 133<br>20.1 ECC 133<br>20.2 openssl的ECC实现 133<br>20.3 主要函数 134<br>20.4 编程示例 134<br>第二十一章 Openssl EVP 138<br>21.1 EVP简 138<br>21.2 数据结构 138<br>21.2.1 EVP_PKEY 138<br>21.2.2 EVP_MD 139<br>21.2.3 EVP_CIPHER 140<br>21.2.4 EVP_CIPHER_CTX 141<br>21.3 源码结构 141<br>21.4 摘要函数 142<br>21.5 对称加解密函数 142<br>21.6 非对称函数 143<br>21.7 BASE64编解码函数 144<br>21.8其他函数 144<br>21.9 对称加密过程 146<br>21.10 编程示例 147<br>第二十二章 Openssl PEM格式 154<br>22.1 PEM概述 154<br>22.2 openssl的PEM实现 154<br>22.3 PEM函数 155<br>22.4 编程示例 156<br>第二十三章 Openssl Engine 160<br>23.1 Engine概述 160<br>23.2 Engine支持的原理 160<br>23.3 Engine数据结构 160<br>23.4 openssl 的Engine源码 161<br>23.5 Engine函数 162<br>23.6 实现Engine示例 163<br>第二十四章 Openssl 通用数据结构 177<br>24.1通用数据结构 177<br>24.2 X509_ALGOR 177<br>24.3 X509_VAL 178<br>24.4 X509_SIG 180<br>24.5 X509_NAME_ENTRY 181<br>24.6 X509_NAME 181<br>24.7 X509_EXTENSION 187<br>24.8 X509_ATTRIBUTE 193<br>24.9 GENERAL_NAME 195<br>第二十五章 Openssl 证书申请 198<br>25.1 证书申请 198<br>25.2 数据结构 198<br>25.3 主要函数 199<br>25.4 编程示例 201<br>25.4.1生成证书请求文件 201<br>25.4.2 解码证书请求文件 203<br>第二十六章 Openssl X509数字证书 205<br>26.1 X509数字证书 205<br>26.2 opessl实现 205<br>26.3 X509数据结构 205<br>26.4 X509_TRUST与X509_CERT_AUX 208<br>26.5 X509_PURPOSE 210<br>26.6 主要函数 213<br>26.7 证书验证 216<br>26.7.1证书验证项 216<br>26.7.2 Openssl的证书验证 216<br>第二十七章 Openssl OCSP 217<br>27.1 概述 217<br>27.2 openssl实现 217<br>27.3 主要函数 217<br>27.4编程示例 222<br>第二十八章 Openssl CRL 223<br>28.1 CRL 223<br>28.2 数据结构 223<br>28.3 CRL函数 224<br>28.4 编程示例 226<br>第二十九章 Openssl PKCS7 228<br>29.1概述 228<br>29.2 数据结构 228<br>29.3 函数 229<br>29.4 消息编解码 229<br>29.4.1 data 230<br>29.4.2 signed data 230<br>29.4.3 enveloped 231<br>29.4.4 signed_and_enveloped 232<br>29.4.5 digest 233<br>29.4.6 encrypted 233<br>29.4.7 读取PEM 234<br>29.4.8 解码pkcs7 235<br>第三十章 Openssl PKCS12 236<br>30.1 概述 236<br>30.2 openss实现 236<br>30.3数据结构 236<br>30.4函数 237<br>30.5 编程示例 239<br>第三十一章 Openssl SSL实现 249<br>31.1概述 249<br>31.2 openssl实现 249<br>31.3 建立SSL测试环境 249<br>31.4 数据结构 250<br>31.5 加密套件 251<br>31.6 密钥信息 252<br>31.7 SESSION 252<br>31.8 多线程支持 253<br>31.9 编程示例 253<br>31.10 函数 264<br>第三十二章 Openssl命令 267<br>32.1概述 267<br>32.2 asn1parse 267<br>32.3 dgst 269<br>32.4 gendh 270<br>32.5 passwd 270<br>32.6 rand 271<br>32.7 genrsa 271<br>32.8 req 272<br>32.9 x509 274<br>32.10 version 277<br>32.11 speed 277<br>32.12 sess_id 278<br>32.13 s_server 278<br>32.14 s_client 280<br>32.15 rsa 282<br>32.16 pkcs7 283<br>32.17 dsaparam 284<br>32.18 gendsa 284<br>32.19 enc 285<br>32.20 ciphers 286<br>32.21 CA 287<br>32.22 verify 291<br>32.23 rsatul 292<br>32.24 crl 293<br>32.25 crl2pkcs7 294<br>32.26 errstr 294<br>32.27 ocsp 295<br>32.28 pkcs12 298<br>32.29 pkcs8 300<br>32.30 s_time 301<br>32.31 dhparam和dh 302<br>32.32 ecparam 303<br>32.33 ec 304<br>32.34 dsa 305<br>32.35 nseq 306<br>32.36 prime 307<br>32.37 smime 307
Qt OpenSSL支持是通过Qt的QSslSocket类实现的。要在Qt使用OpenSSL,首先需要添加OpenSSL库的支持。 根据引用的Qt官方文档,可以找到关于添加OpenSSL支持的详细说明。根据文档的说明,要在Qt添加OpenSSL支持,需要按照以下步骤进行操作: 1. 在Qt源码目录找到OpenSSL的存档文件(通常为.tar.gz或.zip格式)。 2. 解压存档文件,并进入解压后的目录。 3. 打开命令提示符或终端,并导航到解压后的目录。 4. 运行以下命令来配置OpenSSL的构建: ``` ./configure ``` 可以根据需要添加其他选项来自定义构建设置。 5. 运行以下命令开始构建和安装OpenSSL: ``` make make install ``` 注意,可能需要管理员权限才能成功运行`make install`命令。 6. 等待安装完成后,OpenSSL库就已经成功地添加到Qt了。 然后,根据引用的代码片段,您可以使用以下代码来打印查看当前版本的Qt所依赖的OpenSSL版本: ``` qDebug() << QSslSocket::sslLibraryBuildVersionString(); ``` 另外,引用提供了在OpenSSL git仓库日志查找特定版本的描述的方法。通过查看OpenSSL的git仓库日志,您可以找到与Qt所使用的OpenSSL版本相对应的提交。 总结起来,为了在Qt使用OpenSSL,您需要按照Qt官方文档的说明添加OpenSSL支持,并且可以使用QSslSocket::sslLibraryBuildVersionString()函数来获取当前Qt所依赖的OpenSSL版本信息。同时,通过查看OpenSSL的git仓库日志,您可以找到特定版本的详细描述。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值