第1章 PKI基础知识 3
1.1 PKI概述 3
1.2 什么是数字证书 3
1.2.1 数字认证的原理 4
1.2.2 数字认证是如何颁发的 5
1.3 为什么要使用数字证书 5
1.3.1 信息传输的保密性 5
1.3.2 交易者身份的确定性 5
1.3.3 发送信息的不可否认性 5
1.3.4 数据交换的完整性 6
1.4 加密技术 6
1.4.1 对称加密技术 6
1.4.2 非对称加密技术 7
1.5 数字签名技术 8
1.5.1 数字签名技术 8
1.5.2 时间戳技术 9
第2章 OpenSSL入门 13
2.1 OpenSSL概述 13
2.1.1 OpenSSL的组成 13
2.1.2 OpenSSL的优缺点 14
2.2 如何下载编译 15
2.2.1 Windows下编译OpenSSL 15
2.2.2 Linux下编译OpenSSL 17
2.3 如何搭建开发环境 19
2.3.1 Windows下搭建OpenSSL开发环境 19
2.3.2 Linux下搭建OpenSSL开发环境 22
2.4 小结 22
第3章 OpenSSL加密和解密 23
3.1 概述 23
3.2 函数介绍 23
3.2.1 初始化函数 23
3.2.2 加密初始化函数 24
3.2.3 数据加密Update函数 25
3.2.4 数据加密结束函数 25
3.2.5 解密初始化函数 26
3.2.6 数据解密Update函数 26
3.2.7 数据解密结束函数 27
3.3 实例应用——数据加密 27
3.3.1 流程分析 27
3.3.2 实例实现 28
第4章 OpenSSL消息摘要 32
4.1 概述 32
4.2 函数介绍 32
4.2.1 初始化函数 32
4.2.2 设置摘要算法函数 33
4.2.3 摘要Update函数 33
4.2.4 摘要结束函数 33
4.2.5 计算摘要函数 34
4.3 实例应用 34
4.3.1 流程分析 34
4.3.2 实例实现 36
第5章 OpenSSL签名和验证 39
5.1 函数介绍 39
5.1.1 签名初始化函数 39
5.1.2 签名Update函数 40
5.1.3 签名结束函数 40
5.1.4 验证初始化函数 40
5.1.5 验证Update函数 41
5.1.6 验证结束函数 41
5.2 实例应用 41
5.2.1 流程分析 42
5.2.2 实例实现 44
第6章 OpenSSLBase64编解和解码 48
6.1 函数介绍 48
6.1.1 Base64编码初始化函数 48
6.1.2 Base64编码Update函数 48
6.1.3 Base64编码结束函数 49
6.1.4 Base64编码函数 49
6.1.5 Base64解码函数 49
6.1.6 Base64解码初始化函数 50
6.1.7 Base64解码Update函数 50
6.1.8 Base64解码结束函数 50
6.2 实例应用 50
6.2.1 流程分析 51
6.2.2 实例实现 52
第7章 OpenSSL证书操作 56
7.1 函数介绍 56
7.1.1 DER编码转换为内部结构体函数 56
7.1.2 获得证书版本函数 57
7.1.3 获得证书序列号函数 58
7.1.4 获得证书颁发者信息函数 58
7.1.5 获得证书拥有者信息函数 58
7.1.6 获得证书有效期的起始日期函数 59
7.1.7 获得证书有效期的终止日期函数 59
7.1.8 获得证书公钥函数 59
7.1.9 创建和释放证书存储区函数 59
7.1.10 向证书存储区添加证书函数 59
7.1.11 向证书存储区添加证书吊销列表函数 60
7.1.12 创建证书存储区上下文环境函数 60
7.1.13 释放证书存储区上下文环境函数 60
7.1.14 初始化证书存储区上下文环境函数 60
7.1.15 验证证书函数 61
7.2 实例应用 61
7.2.1 流程分析 61
7.2.2 实例实现 64
第8章 SSL/TLS编程 73
8.1 函数介绍 73
8.1.1 初始化SSL算法库函数 73
8.1.2 初始化SSL上下文环境变量函数 74
8.1.3 释放SSL上下文环境变量函数 74
8.1.4 设置SSL证书函数 74
8.1.5 设置SSL私钥函数 75
8.1.6 设置SSL证书函数 75
8.1.7 设置SSL私钥函数 75
8.1.8 检查SSL私钥函数 75
8.1.9 新建SSL句柄函数 76
8.1.10 释放SSL句柄函数 76
8.1.11 设置socket句柄函数 76
8.1.12 建立SSL链接函数 76
8.1.13 接受SSL链接函数 76
8.1.14 获得SSL链接使用的证书 77
8.1.15 发送SSL数据函数 77
8.1.16 读取SSL数据函数 77
8.2 实例应用 77
8.2.1 流程分析 78
8.2.2 实例实现 81
第9章 开发实例——文件保险箱 89
9.1 功能预览 89
9.1.1 文件加密 89
9.1.2 文件解密 90
9.2 流程分析 91
9.2.1 文件加密函数 91
9.2.2 文件解密函数 93
9.3 功能实现 96
第10章 开发实例——安全通信软件 103
10.1 功能预览 103
10.2 流程分析 105
10.2.1 服务端流程分析 105
10.2.2 客户端流程分析 109
10.3 功能实现 112
10.3.1 服务端 112
10.3.2 客户端 119
第11章 开发实例——安全报文系统 126
11.1 功能预览 126
11.1.1 发送方产生安全报文 126
11.1.2 接收方解密安全报文 127
11.2 流程分析 129
11.2.1 发送方流程分析 129
11.2.2 接收方流程分析 133
11.3 功能实现 136
11.3.1 发送方 136
11.3.2 接收方 143
第12章 CryptoAPI开发入门 153
12.1 CryptoAPI的组成 154
12.2 CryptoAPI的优缺点 154
12.3 如何搭建开发环境 154
第13章 密码服务提供者CSP函数 156
13.1 函数介绍 156
13.1.1 连接CSP函数 156
13.1.2 枚举CSP函数 157
13.1.3 获得默认CSP函数 158
13.1.4 设置默认CSP函数 158
13.1.5 获得CSP参数属性函数 158
13.1.6 设置CSP参数函数 159
13.1.7 断开CSP函数 160
13.2 实例应用 160
13.2.1 流程分析 160
13.2.2 实例实现 162
第14章 密钥的产生和交换函数 169
14.1 函数介绍 169
14.1.1 生成函数 169
14.1.2 派生密钥函数 170
14.1.3 销毁密钥函数 171
14.1.4 复制密钥函数 171
14.1.5 导出密钥函数 171
14.1.6 导入密钥函数 171
14.1.7 获得密钥参数函数 172
14.1.8 获得密钥参数函数 173
14.1.9 获得密钥参数函数 174
14.2 实例应用 174
14.2.1 流程分析 174
14.2.2 实例实现 178
第15章 数据的加密和解密函数 183
15.1 函数介绍 183
15.1.1 数据加密函数CryptEncrypt 183
15.1.2 数据解密函数CryptDecrypt 184
15.2 实例应用 184
15.2.1 流程分析 184
15.2.2 实例实现 188
第16章 哈希和数字签名函数 202
16.1 函数介绍 202
16.1.1 创建哈希函数 202
16.1.2 销毁哈希 203
16.1.3 复制哈希函数 203
16.1.4 获得哈希参数函数 203
16.1.5 设置哈希参数函数 204
16.1.6 哈希会话密钥函数 204
16.1.7 哈希数据函数 205
16.1.8 对哈希签名函数 205
16.1.9 对哈希验证签名函数 206
16.2 实例应用 206
16.2.1 流程分析 206
16.2.2 实例实现 210
第17章 证书和证书库函数 217
17.1 函数介绍 217
17.1.1 打开证书库函数 217
17.1.2 关闭证书库函数 218
17.1.3 从证书库枚举证书函数 219
17.1.4 从证书库查找证书函数 219
17.1.5 创建证书句柄函数 220
17.1.6 释放证书句柄函数 220
17.1.7 获得证书句柄属性函数 221
17.1.8 设置证书句柄属性函数 221
17.1.9 获得证书主题名称函数 222
17.2 实例应用 222
17.2.1 流程分析 223
17.2.2 实例实现 224
第18章 开发实例——文件保险箱 228
18.1 功能预览 228
18.1.1 文件加密 228
18.1.2 文件解密 229
18.2 流程分析 230
18.2.1 文件加密函数EncryptFile 230
18.2.2 文件解密函数DecryptFile 234
18.3 功能实现 236
第19章 开发实例—一安全报文系统 246
19.1 功能预览 246
19.1.1 安全报文发送 247
19.1.2 安全报文接收 248
19.2 流程分析 249
19.2.1 发送方流程分析 249
19.2.2 接收方流程分析 255
19.3 功能实现 259
19.3.1 发送方 259
19.3.2 接收方 267
第20章 JavaSecurity开发入门 279
20.1 设计原理和体系结构 279
20.1.1 设计原理 279
20.1.2 体系结构 280
20.2 主要概念 281
20.2.1 引擎类和算法 281
20.2.2 实现和提供者 282
20.2.3 获得实现实例的factory(工厂)方法 282
20.3 主要类和接口 282
20.4 搭建开发环境 282
第21章 Java消息摘要 283
21.1 MessageDigest类函数介绍 283
21.1.1 构造方法 283
21.1.2 生成实例对象函数getInstance(1) 283
21.1.3 生成实例对象函数getInstance(2) 284
21.1.4 获得密码服务提供者函数getProvider 284
21.1.5 计算摘要函数update(1) 284
21.1.6 计算摘要函数update(2) 284
21.1.7 计算摘要函数update(3) 285
21.1.8 计算摘要函数update(4) 285
21.1.9 完成算摘要函数digest(1) 285
21.1.10 完成计算摘要函数digest(2) 285
21.1.11 完成计算摘要函数digest(3) 286
21.1.12 比较摘要值函数isEqual 286
21.1.13 对象重置函数reset 286
21.1.14 获得摘要算法函数getAlgorithm 286
21.1.15 获得摘要值长度函数getDigestLength 287
21.2 实例应用 287
21.2.1 流程分析 287
21.2.2 实例实现 288
第22章 Java加密和解密 291
22.1 KeyGenerator类函数介绍 291
22.1.1 构造方法 291
22.1.2 生成实例对象函数getInstance(1) 291
22.1.3 生成实例对象函数getInstance(2) 292
22.1.4 获得对象密码算法函数getAlgorithm 292
22.1.5 获得密码服务提供者函数getProvider 292
22.1.6 初始化密钥生成器函数init(1) 292
22.1.7 初始化密钥生成器函数init(2) 293
22.1.8 初始化密钥生成器函数init(3) 293
22.1.9 初始化密钥生成器函数init(4) 293
22.1.10 初始化密钥生成器函数init(5) 294
22.1.11 生成密钥函数generateKey 294
22.2 Cipher类函数介绍 294
22.2.1 构造方法 294
22.2.2 生成实例对象函数getInstance(1) 295
22.2.3 生成实例对象函数getInstance(2) 295
22.2.4 获得密码服务提供者函数getProvider 295
22.2.5 获得密码算法函数getAlgorithm 295
22.2.6 获得密码算法分组长度函数getBlockSize 296
22.2.7 获得输出数据的长度函数getOutputSize 296
22.2.8 获得初始化向量函数getIV 296
22.2.9 密码对象初始化函数init(1) 296
22.2.10 密码对象初始化函数init(2) 297
22.2.11 密码对象初始化函数init(3) 297
22.2.12 密码对象初始化函数init(4) 297
22.2.13 计算加密或解密函数update(1) 298
22.2.14 计算加密或解密函数update(2) 298
22.2.15 计算加密或解密函数update(3) 299
22.2.16 计算加密或解密函数update(4) 299
22.2.17 结束加密或解密函数doFin(1) 300
22.2.1 8结束加密或解密函数doFinal(2) 300
22.3 实例应用 300
22.3.1 流程分析 300
22.3.2 实例实现 301
第23章 Java数字签名和验证 305
23.1 KeyPairGenerator类函数介绍 305
23.1.1 构造方法 305
23.1.2 获得密码算法函数getAlgorithm 305
23.1.3 生成实例对象函数getInstance(1) 305
23.1.4 生成实例对象函数getInstance(2) 306
23.1.5 密码对象初始化函数initialize(1) 306
23.1.6 密码对象初始化函数initialize(2) 306
23.1.7 生成非对称密钥对函数genKeyPair和generataKeyPair 307
23.2 Signature类函数介绍 307
23.2.1 构造方法 307
23.2.2 获得签名对象算法函数getAlgorithm 307
23.2.3 生成实例对象函数getInstance(1) 307
23.2.4 生成实例对象函数getInstance(2) 308
23.2.5 初始化验证对象函数initVerify(1) 308
23.2.6 初始化验证对象函数initVerify(2) 308
23.2.7 初始化签名对象函数initSign(1) 309
23.2.8 初始化签名对象函数initSign(2) 309
23.2.9 更新签名或验证数据函数update(1) 309
23.2.10 更新签名或验证数据函数update(2) 310
23.2.11 更新签名或验证数据函数update(3) 310
23.2.12 签名函数sign(1) 310
23.2.13 签名函数sign(2) 310
23.2.14 验证签名函数verify(1) 311
23.2.15 验证签名函数verify(2) 311
23.3 实例应用 312
23.3.1 数字签名实现 312
23.3.2 数字签名验证实现 312
23.3.3 实例实现 313
第24章 keytool和证书类 317
24.1 keytool命令介绍 317
24.1.1 产生密钥对命令genkey 317
24.1.2 向密钥仓库导入证书命令import 318
24.1.3 导出证书请求命令certreq 318
24.1.4 导出证书命令export 318
24.1.5 枚举仓库数据命令list 319
24.1.6 管理密钥仓库命令storepasswd 319
24.1.7 管理密钥仓库命令keypasswd 319
24.1.8 管理密钥仓库命令delete 319
24.2 X509Certicate类函数介绍 319
24.2.1 构造方法 319
24.2.2 检查证书有效期函数checkValidity(1) 320
24.2.3 检查证书有效期函数checkValidity(2) 320
24.2.4 获得证书版本函数getVersion 320
24.2.5 获得证书序列号函数getSerialNumber 320
24.2.6 获得证书颁发者函数getIssuerX500Principal 321
24.2.7 获得证书主题信息函数getSubjectX500Principal 321
24.2.8 获得证书有效起始日期函数getNotBefore 321
24.2.9 获得证书有效期终止日期函数getNotAfter 321
24.2.10 获得DER编码的证书内容函数getTBSCertifiicate 321
24.2.11 获得证书签名值函数getSignature 321
24.2.12 获得证书签名算法名称函数getSigAlgName 322
24.2.13 获得证书密钥用途函数getKeyUsage 322
24.3 X509CRL类函数介绍 322
24.3.1 构造方法 322
24.3.2 getEncoded 322
24.3.3 验证CRL签名函数verify 323
24.3.4 获得CRL版本函数getVersion 323
24.3.5 获得CRL颁发者函数getlssuerX500Principal 323
24.3.6 获得CRL本次更新时间函数getThisUpdate 323
24.3.7 获得CRL下次更新时间函数getNextUpdate 324
24.3.8 获得被吊销的证书函数getRevokedCertificate(1) 324
24.3.9 获得被吊销的证书函数getRevokedCertificate(2) 324
24.3.10 获得被吊销的证书函数getRevokedCertificate(3) 324
24.3.11 获得DER编码的CRL信息函数getTBSCertList 324
24.3.12 获得签名值函数getSignature 325
24.3.13 获得签名算法名称函数getSigAlgName 325
24.4 实例应用 325
24.4.1 流程分析 325
24.4.2 实例实现 326
第25章 Java开发实例——文件保险箱 330
25.1 功能预览 330
25.2 流程分析 332
25.3 功能实现 333
第26章 Java开发实例——安全报文系统 336
26.1 功能预览 336
26.1.1 安全报文发送 336
26.1.2 安全报文接收 337
26.2 流程分析 338
26.2.1 发送方流程分析 338
26.2.2 接收方流程分析 341
26.3 功能实现 343
26.3.1 密钥和证书keystore的生成方法 343
26.3.2 安全报文发送方 344
26.3.3 安全报文接收方 348
第27章 ASP/ASp.Net电子商务网站应用 355
27.1 配置HS的SSL服务器证书 355
27.1.1 生成证书请求 355
27.1.2 安装证书 358
27.1.3 启用SSL 359
27.2 基于数字证书的用户身份认证 360
27.2.1 基于数字证书的用户身份认证的方法 361
27.2.2 ASP/ASp.NET页面获取客户端证书的方法 361
27.3 数据签名处理——基于CAPICOM的应用 366
27.3.1 CAPICOM简介 366
27.3.2 CAPICOM对象——Certiicate对象 367
27.3.3 CAPICOM对象——Certifiicates对象 369
27.3.4 CAPICOM对象——CertifiicateStatus对象 369
27.3.5 CAPICOM对象——Store对象 370
27.3.6 CAPICOM对象——SignedData对象 372
27.3.7 CAPICOM对象——Signer对象 374
27.3.8 CAPICOM对象——Signers对象 374
27.3.9 CAPICOM对象——EnvelopedData对象 374
27.3.10 CAPICOM对象——Recipients对象 375
27.3.11 CAPICOM对象——Algorithm对象 375
27.3.12 CAPICOM对象——其他对象 376
27.3.13 如何在客户端安装部署和调用 376
27.3.14 如何在服务器端安装部署和调用 377
27.4 基于自开发控件应用 378
27.4.1 开发ActiveX控件 378
27.4.2 如何在客户端部署和调用 383
27.4.3 代码示例 384
27.5 开发实例——安全登录 385
27.5.1 登录处理页面(login.apsx.cs) 385
27.5.2 用户页面(main.apsx.cs) 386
27.5.3 出错显示页面(err.apsx.cs) 387
27.5.4 测试功能 387
27.6 开发实例——订单签名 388
27.6.1 签名页面前台(Sign.aspx) 388
27.6.2 签名页面后台(Sign.aspx.cs) 389
27.6.3 签证签名页面前台(verifySign.aspx) 389
27.6.4 验证签名后台页面(verifySign.aspx.cs) 390
27.7 小结 394
第28章 JSP电子商务网站应用 395
28.1 配置JSPWeb服务器的SSL证书 395
28.1.1 生成证书请求文件(CSR) 395
28.1.2 导入证书 397
28.1.3 设置Tomcat支持SSL 397
28.1.4 使用浏览器访问SSL服务器 398
28.2 基于数字证书的用户身份认证 398
28.2.1 基于数字证书的用户身份认证的方法 399
28.2.2 JSP页面获取客户端证书的方法 399
28.3 数据签名处理 401
28.3.1 JSP前台提交签名 401
28.3.2 JSP后台处理签名 402
28.4 开发实例——安全登录 403
28.4.1 SSL登录处理页面(loginjsp) 404
28.4.2 用户主页面(mainjsp) 405
28.4.3 出错处理页面(errjsp) 405
28.4.4 测试代码 405
28.5 开发实例——订单签名 406
28.5.1 签名页面(Signjsp) 406
28.5.2 验证签名页面(verifySignjsp) 407
第29章 PHP电子商务网站应用 410
29.1 配置Apache的SSL证书 410
29.1.1 安装Apache+PHP+SSL 410
29.1.2 配置Apache的SSL证书 412
29.2 基于数字证书的用户身份认证 414
29.2.1 基于数字证书的用户身份认证的方法 414
29.2.2 PHP页面获取客户端证书的方法 415
29.3 数据签名处理 417
29.3.1 PHP前台提交签名 417
29.3.2 PHP后台处理签名 419
29.4 开发实例——安全登录 423
29.4.1 登录页面(login.php) 423
29.4.2 用户主页面(main.php) 424
29.4.3 出错处理页面(err.php) 424
29.4.4 测试代码 424
29.5 开发实例——订单签名 425
29.5.1 签名页面(Sign.php) 425
29.5.2 验证签名页面(verifySign.php) 426
29.5.3 测试代码 427
第30章 颁发和获取数字证书 431
30.1 利用OpenSSL颁发数字证书 431
30.1.1 准备工作 431
30.1.2 建立根证书 431
30.1.3 颁发用户证书 433
30.2 利用Windows证书服务颁发数字证书 434
30.2.1 准备工作 434
30.2.2 安装证书服务并设置CA 434
30.2.3 提交证书请求 435
30.2.4 证书颁发机构处理请求 436
30.2.5 下载证书 437
30.3 通过CA机构获取数字证书 438
第31章 安全电子邮件应用指南 439
31.1 Foxmail安全电子邮件应用 439
31.1.1 为Foxmail邮箱账户配置证书 439
31.1.2 发送和阅读安全电子邮件 440
31.2 Outlook安全电子邮件应用 441
31.2.1 为Outlook邮箱账户配置证书 441
31.2.2 发送和阅读安全电子邮件 442
第32章 代码签名应用指南 445
32.1 什么是代码签名 445
32.2 Windows应用程序代码签名 445
32.2.1 申请代码签名证书 445
32.2.2 使用SignCode.exe对代码签名 446
32.2.3 查看代码签名证书 449
32.3 Java代码签名 449
32.3.1 下载签名工具 449
32.3.2 申请签名证书 449
32.3.3 执行代码签名 450
32.3.4 验证Java代码签名 450
32.4 移动代码签名 450
32.4.1 主流移动操作系统对代码签名的要求 450
32.4.2 代码签名的操作方法 451