OpenSSL编程实战与深入理解

需积分: 40 1 下载量 48 浏览量 更新于2024-07-20 1 收藏 1.21MB PDF 举报
"《openssl编程》是一本详细探讨OpenSSL库使用的书籍,由赵春平撰写,内容涵盖OpenSSL的各个方面,适合进行OpenSSL开发的读者。书中作者分享了他在硕士研究期间以及后续工作中使用OpenSSL的经验,包括替换Globus中的OpenSSL实现、asn1模块的剥离以及属性证书编解码等实践。尽管作者在学习过程中遇到一些挫折,如论文未通过抽检,但他坚持学习并记录OpenSSL的知识,最终整理成书。在openssl.cn论坛上,作者积极解答问题,进一步提升了自己的理解和技能。尽管写作的初衷部分是为了职称评定,但最终成为了一项个人爱好的成果。" 在OpenSSL编程中,主要涉及以下知识点: 1. **OpenSSL库**:OpenSSL是一个开源的库,提供了加密、安全套接层(SSL)和传输层安全(TLS)协议,广泛用于网络安全通信。它包含各种加密算法、证书管理工具和协议实现。 2. **对称加密算法**:如RC4,是一种流加密算法,常用于快速加密大量数据。在书中,作者提到将RC4替换为自定义对称算法的实践经验。 3. **非对称加密算法**:如RSA、DSA等,用于密钥交换和数字签名,提供更强的安全性。在GSSAPI中,非对称算法用于身份验证和保护通信的完整性。 4. **GSSAPI(Generic Security Services Application Program Interface)**:是一个API,允许应用程序使用多种安全机制,如Kerberos,为网络服务提供认证。在OpenSSL中,可以实现GSSAPI的底层算法。 5. **asn1模块**:ASN.1(Abstract Syntax Notation One)是用于编码结构化数据的标准,常用于证书和其他安全相关数据的表示。作者在书中剥离asn1模块,深入理解其工作原理。 6. **PKCS#11接口**:这是用于访问硬件安全模块(如智能卡和密码卡)的接口标准。书中提到的服务端支持PKCS#11,意味着可以与这些硬件设备交互,进行安全操作。 7. **属性证书**:属性证书扩展了X.509证书的概念,包含了持有者的附加属性信息,如权限或责任声明。作者在PMI项目中涉及到属性证书的编解码,这涉及到对X.509证书和ASN.1编码的深入理解。 8. **编程实践**:作者通过编写和调试程序来学习OpenSSL的各个函数,强调了实践在学习过程中的重要性。 9. **论坛互动**:作者在openssl.cn论坛上解答问题,这不仅是对他个人知识的检验,也是学习新知识和保持技能更新的方式。 10. **软件工程经验**:从作者的经历中,我们可以了解到从研究到实际应用的转换,以及如何在不断学习和实践中提升技能。 通过这本书,读者可以期望获得OpenSSL编程的全面指导,包括加密算法的使用、安全协议的实现以及与硬件设备的集成等方面的知识。
2009-07-17 上传
openssl 编程 当前版本 赵春平 著 第一章 基础知识 8 1.1 对称算法 8 1.2 摘要算法 9 1.3 公钥算法 9 1.4 回调函数 11 第二章 openssl简介 13 2.1 openssl简介 13 2.2 openssl安装 13 2.2.1 linux下的安装 13 2.2.2 windows编译与安装 14 2.3 openssl源代码 14 2.4 openssl学习方法 16 第三章 堆栈 17 3.1 openssl堆栈 17 3.2 数据结构 17 3.3 源码 18 3.4 定义用户自己的堆栈函数 18 3.5 编程示例 19 第四章 哈希表 21 4.1 哈希表 21 4.2 哈希表数据结构 21 4.3 函数说明 23 4.4 编程示例 25 第五章 内存分配 27 5.1 openssl内存分配 27 5.2 内存数据结构 27 5.3 主要函数 28 5.4 编程示例 29 第六章 动态模块加载 30 6.1 动态库加载 30 6.2 DSO概述 30 6.3 数据结构 31 6.4 编程示例 32 第七章 抽象IO 34 7.1 openssl抽象IO 34 7.2 数据结构 34 7.3 BIO 函数 36 7.4 编程示例 36 7.4.1 mem bio 36 7.4.2 file bio 37 7.4.3 socket bio 38 7.4.4 md BIO 39 7.4.5 cipher BIO 40 7.4.6 ssl BIO 41 7.4.7 其他示例 42 第八章 配置文件 43 8.1 概述 43 8.2 openssl配置文件读取 43 8.3 主要函数 44 8.4 编程示例 44 第九章 随机数 46 9.1 随机数 46 9.2 openssl随机数数据结构与源码 46 9.3 主要函数 48 9.4 编程示例 48 第十章 文本数据库 50 10.1 概述 50 10.2 数据结构 51 10.3 函数说明 51 10.4 编程示例 52 第十一章 大数 54 11.1 介绍 54 11.2 openssl大数表示 54 11.3 大数函数 55 11.4 使用示例 58 第十二章 BASE64编解码 64 12.1 BASE64编码介绍 64 12.2 BASE64编解码原理 64 12.3 主要函数 65 12.4 编程示例 66 第十三章 ASN1库 68 13.1 ASN1简介 68 13.2 DER编码 70 13.3 ASN1基本类型示例 70 13.4 openssl 的ASN.1库 73 13.5 用openssl的ASN.1库DER编解码 74 13.6 Openssl的ASN.1宏 74 13.7 ASN1常用函数 75 13.8 属性证书编码 89 第十四章 错误处理 93 14.1 概述 93 14.2 数据结构 93 14.3 主要函数 95 14.4 编程示例 97 第十五章 摘要与HMAC 100 15.1 概述 100 15.2 openssl摘要实现 100 15.3 函数说明 101 15.4 编程示例 101 15.5 HMAC 103 第十六章 数据压缩 104 16.1 简介 104 16.2 数据结构 104 16.3 函数说明 105 16.4 openssl中压缩算法协商 106 16.5 编程示例 106 第十七章 RSA 107 17.1 RSA介绍 107 17.2 openssl的RSA实现 107 17.3 RSA签名与验证过程 108 17.4 数据结构 109 17.4.1 RSA_METHOD 109 17.4.2 RSA 110 17.5 主要函数 110 17.6编程示例 112 17.6.1密钥生成 112 17.6.2 RSA加解密运算 113 17.6.3签名与验证 116 第十八章 DSA 119 18.1 DSA简介 119 18.2 openssl的DSA实现 120 18.3 DSA数据结构 120 18.4 主要函数 121 18.5 编程示例 122 18.5.1密钥生成 122 18.5.2签名与验证 124 第十九章DH 126 19.1 DH算法介绍 126 19.2 openssl的DH实现 127 19.3数据结构 127 19.4 主要函数 128 19.5 编程示例 129 第二十章 椭圆曲线 132 20.1 ECC介绍 132 20.2 openssl的ECC实现 133 20.3 主要函数 135 20.3.1参数设置 135 20.3.2参数获取 136 20.3.3转化函数 137 20.3.4其他函数 137 20.4 编程示例 139 第二十一章 EVP 143 21.1 EVP简介 143 21.2 数据结构 143 21.2.1 EVP_PKEY 144 21.2.2 EVP_MD 144 21.2.3 EVP_CIPHER 145 21.2.4 EVP_CIPHER_CTX 146 21.3 源码结构 147 21.4 摘要函数 147 21.5 对称加解密函数 148 21.6 非对称函数 149 21.7 BASE64编解码函数 149 21.8其他函数 150 21.9 对称加密过程 152 21.10 编程示例 152 第二十二章 PEM格式 159 22.1 PEM概述 159 22.2 openssl的PEM实现 160 22.3 PEM函数 161 22.4 编程示例 161 第二十三章 Engine 165 23.1 Engine概述 165 23.2 Engine支持的原理 165 23.3 Engine数据结构 166 23.4 openssl 的Engine源码 167 23.5 Engine函数 167 23.6 实现Engine示例 169 第二十四章 通用数据结构 182 24.1通用数据结构 182 24.2 X509_ALGOR 182 24.3 X509_VAL 184 24.4 X509_SIG 185 24.5 X509_NAME_ENTRY 186 24.6 X509_NAME 187 24.7 X509_EXTENSION 193 24.8 X509_ATTRIBUTE 199 24.9 GENERAL_NAME 200 第二十五章 证书申请 203 25.1 证书申请介绍 203 25.2 数据结构 203 25.3 主要函数 204 25.4 编程示例 206 25.4.1生成证书请求文件 206 25.4.2 解码证书请求文件 208 第二十六章 X509数字证书 210 26.1 X509数字证书 210 26.2 opessl实现 210 26.3 X509数据结构 210 26.4 X509_TRUST与X509_CERT_AUX 214 26.5 X509_PURPOSE 215 26.6 主要函数 218 26.7 证书验证 221 26.7.1证书验证项 221 26.7.2 Openssl中的证书验证 221 第二十七章 OCSP 222 27.1 概述 222 27.2 openssl实现 222 27.3 主要函数 222 27.4编程示例 227 第二十八章 CRL 228 28.1 CRL介绍 228 28.2 数据结构 228 28.3 CRL函数 230 28.4 编程示例 231 第二十九章 PKCS7 233 29.1概述 233 29.2 数据结构 233 29.3 函数 234 29.4 消息编解码 235 29.4.1 data 235 29.4.2 signed data 236 29.4.3 enveloped 237 29.4.4 signed_and_enveloped 238 29.4.5 digest 238 29.4.6 encrypted 239 29.4.7 读取PEM 239 29.4.8 解码pkcs7 240 第三十章 PKCS12 241 30.1 概述 241 30.2 openss实现 241 30.3数据结构 242 30.4函数 243 30.5 编程示例 245 第三十一章 SSL实现 254 31.1概述 254 31.2 openssl实现 254 31.3 建立SSL测试环境 254 31.4 数据结构 256 31.5 加密套件 256 31.6 密钥信息 257 31.7 SESSION 258 31.8 多线程支持 258 31.9 编程示例 259 31.10 函数 270 第三十二章 Openssl命令 272 32.1概述 272 32.2 asn1parse 272 32.3 dgst 274 32.4 gendh 275 32.5 passwd 276 32.6 rand 276 32.7 genrsa 277 32.8 req 278 32.9 x509 280 32.10 version 283 32.11 speed 283 32.12 sess_id 284 32.13 s_server 284 32.14 s_client 286 32.15 rsa 288 32.16 pkcs7 289 32.17 dsaparam 290 32.18 gendsa 291 32.19 enc 291 32.20 ciphers 292 32.21 CA 293 32.22 verify 296 32.23 rsatul 297 32.24 crl 299 32.25 crl2pkcs7 300 32.26 errstr 300 32.27 ocsp 301 32.28 pkcs12 304 32.29 pkcs8 306 32.30 s_time 307 32.31 dhparam和dh 308 32.32 ecparam 309 32.33 ec 310 32.34 dsa 311 32.35 nseq 312 32.36 prime 313 32.37 smime 313