内容介绍
PKI是解决开放式互联网络信息安全需求的成熟体系。PKI体系支持身份认证,信息传输、存储的完整性,消息传输、存储的机密性,以及操作的不可否认性。本书从实战出发,介绍了PKI应用开发过程和细节。全书共32章,分6篇,主要内容包括PKI基础知识、OpenSSL开发、CrytoAPI开发、Java Security开发、电子商务网站应用、PKI技术应用等,涉及C语言、Java语言、JSP、ASP/ASP.NET、PHP等开发语言。为了方便读者深入了解PKI,本书按照先原理、再讲解、再实战的方式进行,并且全部实例和软件都保存在随书赠送的光盘中。
本书适合PKI应用开发人员、企业网络管理人员以及大、中专院校师生阅读。
目录
- 第1篇PKI技术概述
- 第1章PKI基础知识
- 1.1PKI概述
- 1.2什么是数字证书
- 1.2.1数字认证的原理
- 1.2.2数字认证是如何颁发的
- 1.3为什么要使用数字证书
- 1.3.1信息传输的保密性
- 1.3.2交易者身份的确定性
- 1.3.3发送信息的不可否认性
- 1.3.4数据交换的完整性
- 1.4加密技术
- 1.4.1对称加密技术
- 1.4.2非对称加密技术
- 1.5数字签名技术
- 1.5.1数字签名技术
- 1.5.2时间戳技术
- 第2篇OpenSSL开发
- 第2章OpenSSL入门
- 2.1OpenSSL概述
- 2.1.1OpenSSL的组成
- 2.1.2OpenSSL的优缺点
- 2.2如何下载编译
- 2.2.1Windows下编译OpenSSL
- 2.2.2Linux下编译OpenSSL
- 2.3如何搭建开发环境
- 2.3.1Windows下搭建OpenSSL开发环境
- 2.3.2Linux下搭建OpenSSL开发环境
- 2.4小结
- 第3章OpenSSL加密和解密
- 3.1概述
- 3.2函数介绍
- 3.2.1初始化函数EVP_CIPHER_CTX_init
- 3.2.2加密初始化函数EVP_EncryptInit_ex
- 3.2.3数据加密Update函数EVP_EncryptUpdate
- 3.2.4数据加密结束函数EVP_EncryptFinal_ex
- 3.2.5解密初始化函数EVP_DecryptInit_ex
- 3.2.6数据解密Update函数EVP_DecryptUpdate
- 3.2.7数据解密结束函数EVP_DecryptFinal_ex
- 3.3实例应用——数据加密
- 3.3.1流程分析
- 3.3.2实例实现
- 第4章OpenSSL消息摘要
- 4.1概述
- 4.2函数介绍
- 4.2.1初始化函数EVP_MD_CTX_init
- 4.2.2设置摘要算法函数EVP_DigestInit_ex
- 4.2.3摘要Update函数EVP_DigestUpdate
- 4.2.4摘要结束函数EVP_DigestFinal_ex
- 4.2.5计算摘要函数EVP_Digest
- 4.3实例应用
- 4.3.1流程分析
- 4.3.2实例实现
- 第5章OpenSSL签名和验证
- 5.1函数介绍
- 5.1.1签名初始化函数EVP_SignInit_ex
- 5.1.2签名Update函数EVP_SignUpdate
- 5.1.3签名结束函数EVP_SignFinal
- 5.1.4验证初始化函数EVP_VerifyInit_ex
- 5.1.5验证Update函数EVP_VerifyUpdate
- 5.1.6验证结束函数EVP_VerifyFinal
- 5.2实例应用
- 5.2.1流程分析
- 5.2.2实例实现
- 第6章OpenSSL Base64编解和解码
- 6.1函数介绍
- 6.1.1Base64编码初始化函数EVP_EncodeInit
- 6.1.2Base64编码Update函数EVP_EncodeUpdate
- 6.1.3Base64编码结束函数EVP_EncodeFinal
- 6.1.4Base64编码函数EVP_EncodeBlock
- 6.1.5Base64解码函数EVP_DecodeBlock
- 6.1.6Base64解码初始化函数EVP_DecodeInit
- 6.1.7Base64解码Update函数EVP_DecodeUpdate
- 6.1.8Base64解码结束函数EVP_DecodeFinal
- 6.2实例应用
- 6.2.1流程分析
- 6.2.2实例实现
- 第7章OpenSSL证书操作
- 7.1函数介绍
- 7.1.1DER编码转换为内部结构体函数d2i_X509
- 7.1.2获得证书版本函数X509_get_version
- 7.1.3获得证书序列号函数X509_get_serialNumber
- 7.1.4获得证书颁发者信息函数X509_get_issuer_name
- 7.1.5获得证书拥有者信息函数X509_get_subject_name
- 7.1.6获得证书有效期的起始日期函数X509_get_notBefore
- 7.1.7获得证书有效期的终止日期函数X509_get_notAfter
- 7.1.8获得证书公钥函数X509_get_pubkey
- 7.1.9创建和释放证书存储区函数X509_STORE_new、X509_STORE_free
- 7.1.10向证书存储区添加证书函数X509_STORE_add_cert
- 7.1.11向证书存储区添加证书吊销列表函数X509_STORE_add_crl
- 7.1.12创建证书存储区上下文环境函数X509_STORE_CTX_new
- 7.1.13释放证书存储区上下文环境函数X509_STORE_CTX_free
- 7.1.14初始化证书存储区上下文环境函数X509_STORE_CTX_init
- 7.1.15验证证书函数X509_verify_cert
- 7.2实例应用
- 7.2.1流程分析
- 7.2.2实例实现
- 第8章SSL/TLS编程
- 8.1函数介绍
- 8.1.1初始化SSL算法库函数SSL_library_init
- 8.1.2初始化SSL上下文环境变量函数SSL_CTX_new
- 8.1.3释放SSL上下文环境变量函数SSL_CTX_free
- 8.1.4设置SSL证书函数SSL_CTX_use_certificate_file
- 8.1.5设置SSL私钥函数SSL_CTX_use_PrivateKey_file
- 8.1.6设置SSL证书函数SSL_CTX_use_certificate
- 8.1.7设置SSL私钥函数SSL_CTX_use_PrivateKey
- 8.1.8检查SSL私钥函数SSL_CTX_check_private_key
- 8.1.9新建SSL句柄函数SSL_new
- 8.1.10释放SSL句柄函数SSL_free
- 8.1.11设置socket句柄函数SSL_set_fd
- 8.1.12建立SSL链接函数SSL_connect
- 8.1.13接受SSL链接函数SSL_accept
- 8.1.14获得SSL链接使用的证书SSL_get_peer_certificate
- 8.1.15发送SSL数据函数SSL_write
- 8.1.16读取SSL数据函数SSL_read
- 8.2实例应用
- 8.2.1流程分析
- 8.2.2实例实现
- 第9章开发实例——文件保险箱
- 9.1功能预览
- 9.1.1文件加密
- 9.1.2文件解密
- 9.2流程分析
- 9.2.1文件加密函数Encrypt_File
- 9.2.2文件解密函数Decrypt_File
- 9.3功能实现
- 第10章开发实例——安全通信软件
- 10.1功能预览
- 10.2流程分析
- 10.2.1服务端流程分析
- 10.2.2客户端流程分析
- 10.3功能实现
- 10.3.1服务端
- 10.3.2客户端
- 第11章开发实例——安全报文系统
- 11.1功能预览
- 11.1.1发送方产生安全报文
- 11.1.2接收方解密安全报文
- 11.2流程分析
- 11.2.1发送方流程分析
- 11.2.2接收方流程分析
- 11.3功能实现
- 11.3.1发送方
- 11.3.2接收方
- 第3篇CrytoAPI开发
- 第12章CryptoAPI开发入门
- 12.1CryptoAPI的组成
- 12.2CryptoAPI的优缺点
- 12.3如何搭建开发环境
- 第13章密码服务提供者CSP函数
- 13.1函数介绍
- 13.1.1连接CSP函数CryptAcquireContext
- 13.1.2枚举CSP函数CryptEnumProviders
- 13.1.3获得默认CSP函数CryptGetDefaultProvider
- 13.1.4设置默认CSP函数CryptSetProvider
- 13.1.5获得CSP参数属性函数CryptGetProvParam
- 13.1.6设置CSP参数函数CryptSetProvParam
- 13.1.7断开CSP函数CryptReleaseContext
- 13.2实例应用
- 13.2.1流程分析
- 13.2.2实例实现
- 第14章密钥的产生和交换函数
- 14.1函数介绍
- 14.1.1生成函数CryptGenKey
- 14.1.2派生密钥函数CryptDeriveKey
- 14.1.3销毁密钥函数CryptDestroyKey
- 14.1.4复制密钥函数CryptDuplicateKey
- 14.1.5导出密钥函数CryptExportKey
- 14.1.6导入密钥函数CryptImportKey
- 14.1.7获得密钥参数函数CryptGetKeyParam
- 14.1.8获得密钥参数函数CryptSetKeyParam
- 14.1.9获得密钥参数函数CryptGenRandom
- 14.2实例应用
- 14.2.1流程分析
- 14.2.2实例实现
- 第15章数据的加密和解密函数
- 15.1函数介绍
- 15.1.1数据加密函数CryptEncrypt
- 15.1.2数据解密函数CryptDecrypt
- 15.2实例应用
- 15.2.1流程分析
- 15.2.2实例实现
- 第16章哈希和数字签名函数
- 16.1函数介绍
- 16.1.1创建哈希函数CryptCreateHash
- 16.1.2销毁哈希CryptDestroyHash
- 16.1.3复制哈希函数CryptDuplicateHash
- 16.1.4获得哈希参数函数CryptGetHashParam
- 16.1.5设置哈希参数函数CryptSetHashParam
- 16.1.6哈希会话密钥函数CryptHashSessionKey
- 16.1.7哈希数据函数CryptHashData
- 16.1.8对哈希签名函数CryptSignHash
- 16.1.9对哈希验证签名函数CryptVerifySignature
- 16.2实例应用
- 16.2.1流程分析
- 16.2.2实例实现
- 第17章证书和证书库函数
- 17.1函数介绍
- 17.1.1打开证书库函数CertOpenStore
- 17.1.2关闭证书库函数CertCloseStore
- 17.1.3从证书库枚举证书函数CertEnumCertificatesInStore
- 17.1.4从证书库查找证书函数CertFindCertificateInStore
- 17.1.5创建证书句柄函数CertCreateCertificateContext
- 17.1.6释放证书句柄函数CertFreeCertificateContext
- 17.1.7获得证书句柄属性函数CertGetCertificateContextProperty
- 17.1.8设置证书句柄属性函数CertSetCertificateContextProperty
- 17.1.9获得证书主题名称函数CertGetNameString
- 17.2实例应用
- 17.2.1流程分析
- 17.2.2实例实现
- 第18章开发实例——文件保险箱
- 18.1功能预览
- 18.1.1文件加密
- 18.1.2文件解密
- 18.2流程分析
- 18.2.1文件加密函数Encrypt_File
- 18.2.2文件解密函数Decrypt_File
- 18.3功能实现
- 第19章开发实例—安全报文系统
- 19.1功能预览
- 19.1.1安全报文发送
- 19.1.2安全报文接收
- 19.2流程分析
- 19.2.1发送方流程分析
- 19.2.2接收方流程分析
- 19.3功能实现
- 19.3.1发送方
- 19.3.2接收方
- 第4篇Java Security开发
- 第20章Java Security开发入门
- 20.1设计原理和体系结构
- 20.1.1设计原理
- 20.1.2体系结构
- 20.2主要概念
- 20.2.1引擎类和算法
- 20.2.2实现和提供者
- 20.2.3获得实现实例的factory(工厂)方法
- 20.3主要类和接口
- 20.4搭建开发环境
- 第21章Java消息摘要
- 21.1MessageDigest类函数介绍
- 21.1.1构造方法
- 21.1.2生成实例对象函数getInstance(1)
- 21.1.3生成实例对象函数getInstance(2)
- 21.1.4获得密码服务提供者函数getProvider
- 21.1.5计算摘要函数update(1)
- 21.1.6计算摘要函数update(2)
- 21.1.7计算摘要函数update(3)
- 21.1.8计算摘要函数update(4)
- 21.1.9完成计算摘要函数digest(1)
- 21.1.10完成计算摘要函数digest(2)
- 21.1.11完成计算摘要函数digest(3)
- 21.1.12比较摘要值函数isEqual
- 21.1.13对象重置函数reset
- 21.1.14获得摘要算法函数getAlgorithm
- 21.1.15获得摘要值长度函数getDigestLength
- 21.2实例应用
- 21.2.1流程分析
- 21.2.2实例实现
- 第22章Java加密和解密
- 22.1KeyGenerator类函数介绍
- 22.1.1构造方法
- 22.1.2生成实例对象函数getInstance(1)
- 22.1.3生成实例对象函数getInstance(2)
- 22.1.4获得对象密码算法函数getAlgorithm
- 22.1.5获得密码服务提供者函数getProvider
- 22.1.6初始化密钥生成器函数init(1)
- 22.1.7初始化密钥生成器函数init(2)
- 22.1.8初始化密钥生成器函数init(3)
- 22.1.9初始化密钥生成器函数init(4)
- 22.1.10初始化密钥生成器函数init(5)
- 22.1.11生成密钥函数generateKey
- 22.2Cipher类函数介绍
- 22.2.1构造方法
- 22.2.2生成实例对象函数getInstance(1)
- 22.2.3生成实例对象函数getInstance(2)
- 22.2.4获得密码服务提供者函数getProvider
- 22.2.5获得密码算法函数getAlgorithm
- 22.2.6获得密码算法分组长度函数getBlockSize
- 22.2.7获得输出数据的长度函数getOutputSize
- 22.2.8获得初始化向量函数getIV
- 22.2.9密码对象初始化函数init(1)
- 22.2.10密码对象初始化函数init(2)
- 22.2.11密码对象初始化函数init(3)
- 22.2.12密码对象初始化函数init(4)
- 22.2.13计算加密或解密函数update(1)
- 22.2.14计算加密或解密函数update(2)
- 22.2.15计算加密或解密函数update(3)
- 22.2.16计算加密或解密函数update(4)
- 22.2.17结束加密或解密函数doFinal(1)
- 22.2.18结束加密或解密函数doFinal(2)
- 22.3实例应用
- 22.3.1流程分析
- 22.3.2实例实现
- 第23章Java数字签名和验证
- 23.1KeyPairGenerator类函数介绍
- 23.1.1构造方法
- 23.1.2获得密码算法函数getAlgorithm
- 23.1.3生成实例对象函数getInstance(1)
- 23.1.4生成实例对象函数getInstance(2)
- 23.1.5密码对象初始化函数initialize(1)
- 23.1.6密码对象初始化函数initialize(2)
- 23.1.7生成非对称密钥对函数genKeyPair和generateKeyPair
- 23.2Signature类函数介绍
- 23.2.1构造方法
- 23.2.2获得签名对象算法函数getAlgorithm
- 23.2.3生成实例对象函数getInstance(1)
- 23.2.4生成实例对象函数getInstance(2)
- 23.2.5初始化验证对象函数initVerify(1)
- 23.2.6初始化验证对象函数initVerify(2)
- 23.2.7初始化签名对象函数initSign(1)
- 23.2.8初始化签名对象函数initSign(2)
- 23.2.9更新签名或验证数据函数update(1)
- 23.2.10更新签名或验证数据函数update(2)
- 23.2.11更新签名或验证数据函数update(3)
- 23.2.12签名函数sign(1)
- 23.2.13签名函数sign(2)
- 23.2.14验证签名函数verify(1)
- 23.2.15验证签名函数verify(2)
- 23.3实例应用
- 23.3.1数字签名实现
- 23.3.2数字签名验证实现
- 23.3.3实例实现
- 第24章keytool和证书类
- 24.1keytool命令介绍
- 24.1.1产生密钥对命令genkey
- 24.1.2向密钥仓库导入证书命令import
- 24.1.3导出证书请求命令certreq
- 24.1.4导出证书命令export
- 24.1.5枚举仓库数据命令list
- 24.1.6管理密钥仓库命令storepasswd
- 24.1.7管理密钥仓库命令keypasswd
- 24.1.8管理密钥仓库命令delete
- 24.2X509Certificate类函数介绍
- 24.2.1构造方法
- 24.2.2检查证书有效期函数checkValidity(1)
- 24.2.3检查证书有效期函数checkValidity(2)
- 24.2.4获得证书版本函数getVersion
- 24.2.5获得证书序列号函数getSerialNumber
- 24.2.6获得证书颁发者函数getIssuerX500Principal
- 24.2.7获得证书主题信息函数getSubjectX500Principal
- 24.2.8获得证书有效起始日期函数getNotBefore
- 24.2.9获得证书有效期终止日期函数getNotAfter
- 24.2.10获得DER编码的证书内容函数getTBSCertificate
- 24.2.11获得证书签名值函数getSignature
- 24.2.12获得证书签名算法名称函数getSigAlgName
- 24.2.13获得证书密钥用途函数getKeyUsage
- 24.3X509CRL类函数介绍
- 24.3.1构造方法
- 24.3.2getEncoded
- 24.3.3验证CRL签名函数verify
- 24.3.4获得CRL版本函数getVersion
- 24.3.5获得CRL颁发者函数getIssuerX500Principal
- 24.3.6获得CRL本次更新时间函数getThisUpdate
- 24.3.7获得CRL下次更新时间函数getNextUpdate
- 24.3.8获得被吊销的证书函数getRevokedCertificate(1)
- 24.3.9获得被吊销的证书函数getRevokedCertificate(2)
- 24.3.10获得被吊销的证书函数getRevokedCertificate(3)
- 24.3.11获得DER编码的CRL信息函数getTBSCertList
- 24.3.12获得签名值函数getSignature
- 24.3.13获得签名算法名称函数getSigAlgName
- 24.4实例应用
- 24.4.1流程分析
- 24.4.2实例实现
- 第25章Java开发实例—文件保险箱
- 25.1功能预览
- 25.2流程分析
- 25.3功能实现
- 第26章Java开发实例——安全报文系统
- 26.1功能预览
- 26.1.1安全报文发送
- 26.1.2安全报文接收
- 26.2流程分析
- 26.2.1发送方流程分析
- 26.2.2接收方流程分析
- 26.3功能实现
- 26.3.1密钥和证书keystore的生成方法
- 26.3.2安全报文发送方
- 26.3.3安全报文接收方
- 第5篇PKI电子商务网站应用
- 第27章ASP/ASP.Net电子商务网站应用
- 27.1配置IIS的SSL服务器证书
- 27.1.1生成证书请求
- 27.1.2安装证书
- 27.1.3启用SSL
- 27.2基于数字证书的用户身份认证
- 27.2.1基于数字证书的用户身份认证的方法
- 27.2.2ASP/ASP.NET页面获取客户端证书的方法
- 27.3数据签名处理—基于 CAPICOM的应用
- 27.3.1CAPICOM简介
- 27.3.2CAPICOM对象——Certificate对象
- 27.3.3CAPICOM对象——Certificates对象
- 27.3.4CAPICOM对象——CertificateStatus对象
- 27.3.5CAPICOM对象——Store对象
- 27.3.6CAPICOM对象——SignedData对象
- 27.3.7CAPICOM对象——Signer对象
- 27.3.8CAPICOM对象——Signers对象
- 27.3.9CAPICOM对象——EnvelopedData对象
- 27.3.10CAPICOM对象——Recipients对象
- 27.3.11CAPICOM对象——Algorithm对象
- 27.3.12CAPICOM对象——其他对象
- 27.3.13如何在客户端安装部署和调用
- 27.3.14如何在服务器端安装部署和调用
- 27.4基于自开发控件应用
- 27.4.1开发ActiveX控件
- 27.4.2如何在客户端部署和调用
- 27.4.3代码示例
- 27.5开发实例——安全登录
- 27.5.1登录处理页面(login.apsx.cs)
- 27.5.2用户页面(main.apsx.cs)
- 27.5.3出错显示页面(err.apsx.cs)
- 27.5.4测试功能
- 27.6开发实例——订单签名
- 27.6.1签名页面前台(Sign.aspx)
- 27.6.2签名页面后台(Sign.aspx.cs)
- 27.6.3签证签名页面前台(verifySign.aspx)
- 27.6.4验证签名后台页面(verifySign.aspx.cs)
- 27.7小结
- 第28章JSP电子商务网站应用
- 28.1配置JSP Web服务器的SSL证书
- 28.1.1生成证书请求文件(CSR)
- 28.1.2导入证书
- 28.1.3设置Tomcat支持SSL
- 28.1.4使用浏览器访问SSL服务器
- 28.2基于数字证书的用户身份认证
- 28.2.1基于数字证书的用户身份认证的方法
- 28.2.2JSP页面获取客户端证书的方法
- 28.3数据签名处理
- 28.3.1JSP前台提交签名
- 28.3.2JSP后台处理签名
- 28.4开发实例——安全登录
- 28.4.1SSL登录处理页面(login.jsp)
- 28.4.2用户主页面(main.jsp)
- 28.4.3出错处理页面(err.jsp)
- 28.4.4测试代码
- 28.5开发实例——订单签名
- 28.5.1签名页面(Sign.jsp)
- 28.5.2验证签名页面(verifySign.jsp)
- 第29章PHP电子商务网站应用
- 29.1配置Apache的SSL证书
- 29.1.1安装Apache PHP SSL
- 29.1.2配置Apache的SSL证书
- 29.2基于数字证书的用户身份认证
- 29.2.1基于数字证书的用户身份认证的方法
- 29.2.2PHP页面获取客户端证书的方法
- 29.3数据签名处理
- 29.3.1PHP前台提交签名
- 29.3.2PHP后台处理签名
- 29.4开发实例——安全登录
- 29.4.1登录页面(login.php)
- 29.4.2用户主页面(main.php)
- 29.4.3出错处理页面(err.php)
- 29.4.4测试代码
- 29.5开发实例——订单签名
- 29.5.1签名页面(Sign.php)
- 29.5.2验证签名页面(verifySign.php)
- 29.5.3测试代码
- 第6篇其他PKI技术应用
- 第30章颁发和获取数字证书
- 30.1利用OpenSSL颁发数字证书
- 30.1.1准备工作
- 30.1.2建立根证书
- 30.1.3颁发用户证书
- 30.2利用Windows证书服务颁发 数字证书
- 30.2.1准备工作
- 30.2.2安装证书服务并设置CA
- 30.2.3提交证书请求
- 30.2.4证书颁发机构处理请求
- 30.2.5下载证书
- 30.3通过CA机构获取数字证书
- 第31章安全电子邮件应用指南
- 31.1Foxmail安全电子邮件应用
- 31.1.1为Foxmail邮箱账户配置证书
- 31.1.2发送和阅读安全电子邮件
- 31.2Outlook安全电子邮件应用
- 31.2.1为Outlook邮箱账户配置证书
- 31.2.2发送和阅读安全电子邮件
- 第32章代码签名应用指南
- 32.1什么是代码签名
- 32.2Windows应用程序代码签名
- 32.2.1申请代码签名证书
- 32.2.2使用SignCode.exe对代码签名
- 32.2.3查看代码签名证书
- 32.3Java代码签名
- 32.3.1下载签名工具
- 32.3.2申请签名证书
- 32.3.3执行代码签名
- 32.3.4验证Java代码签名
- 32.4移动代码签名
- 32.4.1主流移动操作系统对代码签名的要求
- 32.4.2代码签名的操作方法