版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第9章章 安全套接层协议安全套接层协议SSL在第在第5 5章和第章和第8 8章中已经介章中已经介绍了绍了SocketSocket(套接字)编(套接字)编程基础和编程模型。使用程基础和编程模型。使用这些技术可以很方便地构这些技术可以很方便地构建高效、实用的客户机建高效、实用的客户机/ /服服务器应用程序。但是普通务器应用程序。但是普通的的SocketSocket模型使用明文传模型使用明文传输数据,信息很容易被拦输数据,信息很容易被拦截和监听。随着电子商务截和监听。随着电子商务的普及,在线支付势在必的普及,在线支付势在必行,网络安全变得尤为重行,网络安全变得尤为重要。本章所介绍的安全套要。本章所
2、介绍的安全套接层协议接层协议SSLSSL可以用来保障可以用来保障在在InternetInternet上数据传输的上数据传输的安全,利用数据加密技术,安全,利用数据加密技术,可确保数据在网络上的传可确保数据在网络上的传输过程中不会被截取及窃输过程中不会被截取及窃听。听。本章知识点本章知识点9.1 9.1 什么是什么是SSLSSL9.2 9.2 数字证书数字证书9.3 OpenSSL 9.3 OpenSSL 编程基础编程基础9.4 OpenSSL 9.4 OpenSSL 编程实例编程实例9.1 什么是什么是SSL9.1.1 SSL9.1.1 SSL简介和相关概念简介和相关概念9.1.2 SSL9.
3、1.2 SSL的握手过程的握手过程9.1.1 SSL简介和相关概念简介和相关概念p打开打开IEIE的的InternetInternet选项对话框选择使用选项对话框选择使用的的SSLSSL版本版本SSL协议的体系结构协议的体系结构1SSL证书证书pSSLSSL证书是数字证书的一种,在建立证书是数字证书的一种,在建立SSLSSL连接时,连接时,WebWeb服务器需要一个服务器需要一个SSLSSL证书,证书,用于证明网站的真实身份,提高用户对用于证明网站的真实身份,提高用户对网站的信任度;有效避免钓鱼网站、仿网站的信任度;有效避免钓鱼网站、仿冒网站等网络诈骗行为的威胁;冒网站等网络诈骗行为的威胁;
4、建立建立SSLSSL安全通道,确保客户与网站之间的信安全通道,确保客户与网站之间的信息加密传输,保证安全。息加密传输,保证安全。2密钥密钥p密钥是数据加密解密过程中的一种参数密钥是数据加密解密过程中的一种参数,它是在明文转换为密文或将密文转换,它是在明文转换为密文或将密文转换为明文的算法中输入的数据。密钥分为为明文的算法中输入的数据。密钥分为两种:对称密钥与非对称密钥。两种:对称密钥与非对称密钥。对称密钥加密对称密钥加密非对称密钥加密非对称密钥加密3CSR文件文件pCSRCSR是是Cerificate Signing RequestCerificate Signing Request的英的英文
5、缩写,即证书签发请求文件。证书申文缩写,即证书签发请求文件。证书申请者在申请数字证书时,由请者在申请数字证书时,由CSPCSP(加密服(加密服务提供者)在生成私钥的同时生成务提供者)在生成私钥的同时生成CSRCSR文文件。证书申请者只要把件。证书申请者只要把CSRCSR文件提交给证文件提交给证书颁发机构,证书颁发机构就可以使用书颁发机构,证书颁发机构就可以使用其根证书私钥签名生成证书公钥文件,其根证书私钥签名生成证书公钥文件,也就是颁发给用户的证书。也就是颁发给用户的证书。4利用利用MAC算法验证消息完整性算法验证消息完整性pMACMAC是是Message Authentication Cod
6、esMessage Authentication Codes的的缩写,即消息认证码。缩写,即消息认证码。MACMAC算法是带私钥算法是带私钥的的HashHash函数,消息的散列值由只有通信函数,消息的散列值由只有通信双方知道的秘私钥双方知道的秘私钥K K来控制。此时来控制。此时HashHash值值称作称作MACMAC。p HashHash,一般翻译做,一般翻译做 散列散列 ,也有直接音,也有直接音译为译为 哈希哈希 的,就是把任意长度的输入的,就是把任意长度的输入,通过散列算法,变换成固定长度的输,通过散列算法,变换成固定长度的输出,该输出就是散列值。出,该输出就是散列值。5基于基于SSL的应
7、用层协议的应用层协议协议名说明HTTPSHTTP是Hypertext Transfer Protocol的缩写,即超文本传输协议。用于规定浏览器和Web服务器之间互相通信的规则。HTTPS是Hyper Text Transfer Protocol over Secure Socket Layer的缩写,即基于SSL的超文本传输协议。HTTPS是HTTP的安全版。即在HTTP下加入SSL层POP3SPOP3(Post Office Protocol 3)即邮局协议的第3个版本,它是规定个人计算机如何连接到互联网上的邮件服务器进行收发邮件的协议。它是因特网电子邮件的第一个离线协议标准,POP3协议
8、允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时根据客户端的操作删除或保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。POP3S表示 Pop3 (Post Office Protocol) Secure,即基于SSL的POP3FTPS在安全套接层的基础上使用标准的FTP协议和指令的一种增强型FTP协议,为FTP协议和数据通道增加了SSL安全功能。FTPS也称作“FTP-SSL”和“FTP-over-SSL”MIAPSIMAP是Internet Mail Access Protocol的缩写,它的主要作用是邮件客户端(例如MS
9、Outlook Express)可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。它与POP3协议的主要区别是用户可以不用把所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作。MIAPS是基于SSL的IMAP协议9.1.2 SSL的握手过程的握手过程在不同情况下,在不同情况下,SSLSSL握手过程存在差异握手过程存在差异。下面介绍以下。下面介绍以下3 3种情况的握手过程种情况的握手过程:(1 1)只验证服务器的)只验证服务器的SSLSSL握手过程。握手过程。(2 2)验证服务器和客户端的)验证服务器和客户端的SSLSSL握手过握手过程。程。(3 3)恢复原有会话的)恢复原有
10、会话的SSLSSL握手过程。握手过程。1只验证服务器的只验证服务器的SSL握手过程握手过程 2验证服务器和客户端的验证服务器和客户端的SSL握手过程握手过程3恢复原有会话的恢复原有会话的SSL握手过程握手过程9.2 数字证书数字证书9.2.1 9.2.1 基本概念基本概念9.2.2 9.2.2 数字证书的分类数字证书的分类9.2.3 9.2.3 数字证书的授权机构数字证书的授权机构9.2.4 9.2.4 部署基于数字证书的部署基于数字证书的HTTPSHTTPS网网站站9.2.1 基本概念基本概念p数字证书是一个经证书授权中心数字签数字证书是一个经证书授权中心数字签名的包含公钥拥有者信息以及公钥
11、的文名的包含公钥拥有者信息以及公钥的文件。最简单的证书包含一个公钥、名称件。最简单的证书包含一个公钥、名称以及证书授权中心的数字签名。数字证以及证书授权中心的数字签名。数字证书由一个权威机构书由一个权威机构CACA机构,发行的。机构,发行的。CApCACA是是Certificate AuthorityCertificate Authority的缩写,即证书的缩写,即证书授权中心。作为网络营销交易中受信任的第三授权中心。作为网络营销交易中受信任的第三方,来解决公钥体系中公钥合法性的检验问题方,来解决公钥体系中公钥合法性的检验问题。CACA机构是承担网上安全交易认证服务、签发机构是承担网上安全交易
12、认证服务、签发数字证书、确认用户身份的服务机构,是一个数字证书、确认用户身份的服务机构,是一个具有权威性、公正性的第三方。截至具有权威性、公正性的第三方。截至20142014年年3 3月月1111日,国家工业和信息化部以资质合规的方日,国家工业和信息化部以资质合规的方式,陆续向式,陆续向3030多家相关机构颁发了从业资质多家相关机构颁发了从业资质1加密、解密加密、解密当发送一份保密文件时,发送方使用接收当发送一份保密文件时,发送方使用接收方的公钥对数据加密,而接收方则使用方的公钥对数据加密,而接收方则使用自己的私钥解密,这样信息就可以安全自己的私钥解密,这样信息就可以安全无误地到达目的地了。通
13、过数字的手段无误地到达目的地了。通过数字的手段保证加密过程是一个不可逆过程,即只保证加密过程是一个不可逆过程,即只有用私有密钥才能解密。有用私有密钥才能解密。2数字签名数字签名p用户也可以采用自己的私钥对信息加以处理,用户也可以采用自己的私钥对信息加以处理,由于密钥仅为本人所有,这样就产生了别人无由于密钥仅为本人所有,这样就产生了别人无法生成的文件,也就形成了数字签名。采用数法生成的文件,也就形成了数字签名。采用数字签名,能够确认以下两点:字签名,能够确认以下两点:p(1 1)保证信息是由签名者自己签名发送的,)保证信息是由签名者自己签名发送的,签名者不能否认或难以否认;签名者不能否认或难以否
14、认;p(2 2)保证信息自签发后到收到为止未曾作过)保证信息自签发后到收到为止未曾作过任何修改,签发的文件是真实文件。任何修改,签发的文件是真实文件。9.2.2 数字证书的分类数字证书的分类根据数字证书的应用情况,可以将其分为根据数字证书的应用情况,可以将其分为p 个人证书个人证书p 企业或机构身份证书企业或机构身份证书p 支付网关证书支付网关证书p 服务器证书服务器证书p 企业或机构代码签名证书企业或机构代码签名证书p 安全电子邮件证书安全电子邮件证书p 个人代码签名证书个人代码签名证书1个人证书个人证书p 个人证书在网络通讯中标识个人的身份,证书中包含个人证书在网络通讯中标识个人的身份,证
15、书中包含个人身份信息和个人的公钥,用于标识证书持有人的个人身份信息和个人的公钥,用于标识证书持有人的个人身份。数字安全证书和对应的私钥存储于个人身份。数字安全证书和对应的私钥存储于E-keyE-key或或U U盾等安全客户端中,用于个人在网上进行合同签定、盾等安全客户端中,用于个人在网上进行合同签定、定单、录入审核、操作权限、支付信息等活动中标明定单、录入审核、操作权限、支付信息等活动中标明身份。身份。2企业或机构身份证书企业或机构身份证书p颁发给企事业单位、政府部门、社会团颁发给企事业单位、政府部门、社会团体等各类组织机构。用于标志证书持有体等各类组织机构。用于标志证书持有人在进行信息交换、
16、电子签名、电子政人在进行信息交换、电子签名、电子政务、电子商务等网络活动中的身份,证务、电子商务等网络活动中的身份,证书可存放在硬盘、书可存放在硬盘、USB KeyUSB Key、ICIC卡等各类卡等各类介质中。介质中。3支付网关证书支付网关证书p 证书签发中心针对支付网关签发的数字证书,是支证书签发中心针对支付网关签发的数字证书,是支付网关实现数据加解密的主要工具,用于数字签名付网关实现数据加解密的主要工具,用于数字签名和信息加密。支付网关证书仅用于支付网关提供的和信息加密。支付网关证书仅用于支付网关提供的服务服务(Internet (Internet 上各种安全协议与银行现有网络数上各种安
17、全协议与银行现有网络数据格式的转换)。支付网关证书只能在有效状态下据格式的转换)。支付网关证书只能在有效状态下使用且不可被申请者转让。使用且不可被申请者转让。 p 支付网关(支付网关(Payment GatewayPayment Gateway)是银行金融网络系)是银行金融网络系统和统和InternetInternet网络之间的接口,是由银行操作的将网络之间的接口,是由银行操作的将InternetInternet上传输的数据转换为金融机构内部数据的上传输的数据转换为金融机构内部数据的一组服务器设备,或由指派的第三方处理商家的支一组服务器设备,或由指派的第三方处理商家的支付信息和顾客的支付指令。
18、付信息和顾客的支付指令。4服务器证书服务器证书p组成组成WebWeb服务器的服务器的SSLSSL安全功能的唯一数安全功能的唯一数字标识。通过相互信任的第三方组织获字标识。通过相互信任的第三方组织获得,并为用户提供验证得,并为用户提供验证WebWeb站点身份的手站点身份的手段。服务器证书包含详细的身份验证信段。服务器证书包含详细的身份验证信息,如服务器内容附属的组织、颁发证息,如服务器内容附属的组织、颁发证书的组织以及称为公钥信息。服务器证书的组织以及称为公钥信息。服务器证书可以确保用户关于书可以确保用户关于webweb服务器内容的验服务器内容的验证,而且建立的证,而且建立的HTTPHTTP连接
19、是安全的。连接是安全的。5企业或机构代码签名证书企业或机构代码签名证书p代码签名证书是代码签名证书是CACA中心签发给软件提供商的中心签发给软件提供商的数字证书,包含软件提供商的身份信息、公数字证书,包含软件提供商的身份信息、公钥及钥及CACA的签名。软件提供商使用代码签名证的签名。软件提供商使用代码签名证书对软件进行签名后放到书对软件进行签名后放到InternetInternet上,当用上,当用户在户在InternetInternet上下载该软件时,将会得到提上下载该软件时,将会得到提示,从而可以确信软件的来源,以及软件自示,从而可以确信软件的来源,以及软件自签名后到下载前,没有遭到修改或破
20、坏。签名后到下载前,没有遭到修改或破坏。p代码签名证书可以对代码签名证书可以对 3232位的位的.exe .exe 、.cab .cab 、.ocx.ocx和和.class .class 等程序和文件进行签名。等程序和文件进行签名。6安全电子邮件证书安全电子邮件证书p在互联网上发送电子邮件就像邮寄明信片一在互联网上发送电子邮件就像邮寄明信片一样,很容易被别人随意阅读甚至篡改。使用样,很容易被别人随意阅读甚至篡改。使用安全电子邮件证书可以确保邮件的安全性。安全电子邮件证书可以确保邮件的安全性。p安全电子邮件证书可以安装在标准的互联网安全电子邮件证书可以安装在标准的互联网浏览器中,可以方便地应用于
21、浏览器中,可以方便地应用于 Netscape Netscape MessengerMessenger、Microsoft OutlookMicrosoft Outlook、Outlook Outlook ExpressExpress等遵循安全电子邮件扩展协议的程等遵循安全电子邮件扩展协议的程序中。使用证书后,可以对电子邮件的内容序中。使用证书后,可以对电子邮件的内容和附件进行加密,确保在传输的过程中不被和附件进行加密,确保在传输的过程中不被他人阅读、截取和篡改。也可以对电子邮件他人阅读、截取和篡改。也可以对电子邮件进行签名,使得接收方可以确认该电子邮件进行签名,使得接收方可以确认该电子邮件是由
22、发送方发送的,并且在传送过程中未被是由发送方发送的,并且在传送过程中未被篡改。篡改。7个人代码签名证书个人代码签名证书p CACA中心签发给软件提供人的数字证书,包含软件提中心签发给软件提供人的数字证书,包含软件提供个人的身份信息、公钥及供个人的身份信息、公钥及 CA CA 的签名。软件提供的签名。软件提供人使用代码签名证书对软件进行签名后放到人使用代码签名证书对软件进行签名后放到 Internet Internet 上,当用户在上,当用户在 Internet Internet 上下载该软件上下载该软件时,将会得到提示,从而可以确信:软件的来源;时,将会得到提示,从而可以确信:软件的来源;以及
23、软件自签名后到下载前,没有遭到修改或破坏以及软件自签名后到下载前,没有遭到修改或破坏。代码签名证书可以对。代码签名证书可以对 32 32位的位的 .exe .exe 、 .cab .cab 、 .ocx .ocx 、 .class .class 等程序和文件进行签名。等程序和文件进行签名。9.2.3 数字证书的授权机构数字证书的授权机构p 数字证书由数字证书由CACA机构(机构(Certificate AuthorityCertificate Authority,证书授,证书授权中心)颁发。权中心)颁发。CACA机构作为电子商务交易中受信任的机构作为电子商务交易中受信任的第三方,承担公钥体系中
24、公钥的合法性检验的责任。第三方,承担公钥体系中公钥的合法性检验的责任。CA机构签发数字证书机构签发数字证书9.2.4 部署基于数字证书的部署基于数字证书的HTTPS网网站站HTTPS网站的流程的工作流程网站的流程的工作流程(1 1)HTTPSHTTPS网站生成一个证书申请文件,并将其发送到网站生成一个证书申请文件,并将其发送到CACA机构。机构。(2 2)CACA机构为机构为HTTPSHTTPS网站生成一个根证书,其中包含与网站生成一个根证书,其中包含与HTTPSHTTPS网站进网站进行通讯的公钥。同时行通讯的公钥。同时CACA机构为机构为HTTPSHTTPS网站颁发一个普通证书。普通证网站颁
25、发一个普通证书。普通证书继承自根证书。书继承自根证书。(3 3)客户端获得)客户端获得HTTPSHTTPS网站的根证书,并导入客户端网站的根证书,并导入客户端“根受信任的颁根受信任的颁发者发者”列表。列表。(4 4)客户端访问)客户端访问HTTPSHTTPS网站时会获得与其绑定的普通证书,并使用根网站时会获得与其绑定的普通证书,并使用根证书对普通证书进行验证,确定是否信任该网站。证书对普通证书进行验证,确定是否信任该网站。 IE浏览器在验证证书的时候主要从下面浏览器在验证证书的时候主要从下面3个方个方面检查面检查(1 1)证书的颁发者是否在)证书的颁发者是否在“根受根受信任的证书颁发机构列表信
26、任的证书颁发机构列表”中;中;(2 2)证书是否过期;)证书是否过期;(3 3)证书的持有者是否和访问的)证书的持有者是否和访问的网站一致。网站一致。1在在Windows Server 2003中中IIS 6.0在在“控制面板控制面板”中点击中点击“添加或删除程序添加或删除程序”,打开,打开“添加或删除程序添加或删除程序”窗口窗口打开打开“Windows组件向导组件向导”窗口窗口选择应用程序服务器组件的窗口选择应用程序服务器组件的窗口IIS管理窗口管理窗口2配置和管理配置和管理IISp 设置网站的基本属性设置网站的基本属性设置网站的主目录设置网站的主目录设置设置Web站点的默认文档站点的默认文
27、档3安装证书服务安装证书服务在在“添加或删除程序添加或删除程序”窗口中单击左侧的窗口中单击左侧的“添加添加/ /删除删除WindowsWindows组件组件”图标,打开图标,打开“WindowsWindows组件向导组件向导”窗口,选窗口,选中中“证书服务证书服务”,“选择选择CA类型类型”窗口窗口“选择选择CA类型类型”窗口窗口“选择选择CA类型类型”窗口窗口“是否停止是否停止Internet信息服务信息服务”对话框对话框是否启用是否启用ASP证书颁发机构管理窗口证书颁发机构管理窗口设置证书颁发机构的属性设置证书颁发机构的属性 选择对证书请求的处理策略选择对证书请求的处理策略4创建请求证书文
28、件创建请求证书文件 默认网站属性默认网站属性Web服务器证书向导服务器证书向导默认网站属性默认网站属性延迟或立即请求延迟或立即请求”对话框对话框“名称和安全性设置名称和安全性设置”窗口窗口录入单位信息窗口录入单位信息窗口 “站点公用名称站点公用名称”窗口窗口“地理信息地理信息”窗口窗口 “保存证书请求文件保存证书请求文件”窗口窗口5为为Web站点申请站点申请CA证书证书p安装证书服务后,客户端就可以通过访安装证书服务后,客户端就可以通过访问下面的地址申请证书了。问下面的地址申请证书了。http:/http:/网站网站IPIP地址地址/certsrv/certsrv/选择证书类型选择证书类型“高
29、级证书申请高级证书申请”页面页面提交一个证书申请或续订申请提交一个证书申请或续订申请“证书已颁发证书已颁发”页面页面查看刚刚颁发的证书查看刚刚颁发的证书将证书保存为将证书保存为.cer文件文件6将证书绑定到网站将证书绑定到网站p(1 1)依次选择)依次选择“控制面板控制面板”/ /“管理工具管理工具”/ /“IISIIS管理器管理器”,打开,打开IISIIS管理器。管理器。p(2 2)右击默认网站,选择)右击默认网站,选择“属性属性”,再选择,再选择“目录安全性目录安全性”选项卡。如图选项卡。如图9.449.44所所示。单击示。单击“服务器证书服务器证书”按钮,打开按钮,打开WebWeb服务器
30、证书向导,如图服务器证书向导,如图9.459.45所示。所示。处理挂起的请求处理挂起的请求(3 3)单击)单击“下一步下一步”按钮,打开按钮,打开“挂起的证书请求挂起的证书请求” 窗窗口,如图口,如图9.469.46所示。所示。(4 4)选择)选择“处理挂起的请求并安装证书处理挂起的请求并安装证书”,然后单击,然后单击“下一步下一步”按钮,打开按钮,打开“处理挂起的请求处理挂起的请求” 窗口,如图窗口,如图9.479.47所示。所示。程序的运行结果程序的运行结果(5 5)选择前面申请到的证书文件)选择前面申请到的证书文件c:certnew.cerc:certnew.cer,然后单击,然后单击“
31、下一步下一步”按钮,打按钮,打开开“为网站指定为网站指定SSLSSL端口端口”窗口。保持默认的窗口。保持默认的443443端口即可。端口即可。(6(6)单击)单击“下一步下一步”按钮,打开按钮,打开“证书摘要证书摘要”窗窗口。可以查看证书的摘要信息。单击口。可以查看证书的摘要信息。单击“下一步下一步”按钮,完成将证书绑定到网站的操作。按钮,完成将证书绑定到网站的操作。7启用网站的启用网站的HTTPS打开打开IISIIS管理器,右击默认网站,选择管理器,右击默认网站,选择“属性属性”,再选择,再选择“目录安全性目录安全性”选项卡。然后单击选项卡。然后单击“编编辑辑”按钮,打开按钮,打开“安全通信
32、安全通信”对话框对话框 通过通过HTTP方式已经不能正常访问方式已经不能正常访问HTTPS网站网站访问访问HTTPS网站网站p 在创建请求证书文件时曾指定站点公用名称,此时可以通过下面在创建请求证书文件时曾指定站点公用名称,此时可以通过下面的的urlurl访问访问HTTPSHTTPS网站。网站。https:/https:/站点公用名称站点公用名称p 地址栏后面有一个小锁头图标表示该站点已经启用地址栏后面有一个小锁头图标表示该站点已经启用HTTPSHTTPS9.3 OpenSSL 编程基础编程基础9.3.1 OpenSSL9.3.1 OpenSSL概况概况9.3.2 9.3.2 需要包含的头文件
33、需要包含的头文件9.3.3 9.3.3 需要引用的库文件需要引用的库文件9.3.4 9.3.4 初始化初始化OpenSSLOpenSSL9.3.5 9.3.5 创建创建SSLSSL会话连接所使用的协议会话连接所使用的协议9.3.6 9.3.6 加载和使用证书加载和使用证书9.3.7 SSL9.3.7 SSL套接字套接字9.3.8 OpenSSL9.3.8 OpenSSL握手握手9.3.9 9.3.9 通讯结束通讯结束9.3.1 OpenSSL概况概况pOpenSSLOpenSSL是是一个强大的、开源的安全套接字层密一个强大的、开源的安全套接字层密码库,它支持码库,它支持SSL v2/v3SSL
34、 v2/v3和和TLSTLS(Transport Layer SecurityTransport Layer Security,安全传输,安全传输层协议)层协议) v1 v1。pOpenSSLOpenSSL基于基于Eric A. YoungEric A. Young和和Tim J. Tim J. HudsonHudson开发的开发的SSLeaySSLeay库。库。OpenSSLOpenSSL工具集工具集遵循遵循ApacheApache风格的许可协议。也就是说风格的许可协议。也就是说,用户可以免费获得、并将其应用于商,用户可以免费获得、并将其应用于商业或非商业应用中。业或非商业应用中。1下载和安
35、装下载和安装OpenSSL for Windowshttp:/ *.h.h文文件)。件)。pliblib,包含,包含OpenSSLOpenSSL的库文件(的库文件(* *.lib.lib文件文件)。)。2在在VC+项目中引用项目中引用OpenSSLp 首先在首先在Visual Studio 2012Visual Studio 2012中选择中选择“文件文件”/ /“新建新建”/ /“项目项目”,打开,打开“新建项目新建项目”对话框。在左侧列表中依次选择对话框。在左侧列表中依次选择“模板模板”/ /“其他语言其他语言”/ /“Visual C+Visual C+”,在项目类型列表中选择,在项目类
36、型列表中选择“Win32Win32控控制台应用程序制台应用程序”,项目名输入,项目名输入OpenSslServerOpenSslServer,单击,单击“确定确定”按钮按钮创建项目。创建项目。p 在菜单中选择在菜单中选择“项目项目”/ /“OpenSslServerOpenSslServer属性属性”,打开项目属性,打开项目属性对话框。在左侧列表中选中对话框。在左侧列表中选中“配置属性配置属性”/ /“VC+VC+目录目录”,在,在“包包含目录含目录”中增加中增加C:OpenSSL-Win32include;C:OpenSSL-Win32include;,在,在“引用目录引用目录”中中增加增加
37、C:OpenSSL-Win32lib;C:OpenSSL-Win32lib;,在,在“库目录库目录”中增加中增加C:OpenSSL-C:OpenSSL-Win32lib;Win32lib;配置配置VC+目录目录9.3.2 需要包含的头文件需要包含的头文件p 要开发要开发OpenSSLOpenSSL应用程序,通常需要包含如下的头文件应用程序,通常需要包含如下的头文件#include openssl/ssl.h#include openssl/ssl.h#include openssl/x509.h#include openssl/x509.h#include openssl/rand.h#inc
38、lude openssl/rand.h#include openssl/err.h#include openssl/err.h9.3.3 需要引用的库文件需要引用的库文件p要开发要开发OpenSSLOpenSSL应用程序,通常需要使用下面应用程序,通常需要使用下面的语法引用库文件的语法引用库文件#pragma comment( lib, libeay32.lib )#pragma comment( lib, libeay32.lib )#pragma comment( lib, ssleay32.lib )#pragma comment( lib, ssleay32.lib )#pragma
39、comment (lib,WS2_32.lib)#pragma comment (lib,WS2_32.lib)plibeay32.liblibeay32.lib和和ssleay32.libssleay32.lib保存在保存在C:OpenSSL-Win32libC:OpenSSL-Win32lib目录下。目录下。WS2_32.libWS2_32.lib一一般由操作系统自带。般由操作系统自带。9.3.4 初始化初始化OpenSSLp1 1SSL_library_init()SSL_library_init()p2 2OpenSSL_add_all_algorithms()OpenSSL_add_
40、all_algorithms()p3 3SSL_load_error_strings ()SSL_load_error_strings ()9.3.5 创建创建SSL会话连接所使用的协议会话连接所使用的协议服务器程序可以使用下面的语句指定服务器程序可以使用下面的语句指定SSLSSL会话所使用的协议:会话所使用的协议: SSL_METHOD SSL_METHOD * *TLSv1_server_method(void); /TLSv1_server_method(void); /使用使用TLSv1.0TLSv1.0协协议议 SSL_METHOD SSL_METHOD * *SSLv2_serve
41、r_method(void); /SSLv2_server_method(void); /使用使用SSLv2SSLv2协议协议 SSL_METHOD SSL_METHOD * *SSLv3_server_method(void); /SSLv3_server_method(void); /使用使用SSLv3SSLv3协议协议 SSL_METHOD SSL_METHOD * *SSLv23_server_method(void); /SSLv23_server_method(void); /使用使用SSLv2/3SSLv2/3协协议议客户端程序可以使用下面的语句指定客户端程序可以使用下面的语句指
42、定SSLSSL会话所使用的协议:会话所使用的协议: SSL_METHOD SSL_METHOD* * TLSv1_client_method(void); / TLSv1_client_method(void); /使用使用TLSv1.0 TLSv1.0 协协议议 SSL_METHOD SSL_METHOD* * SSLv2_client_method(void); / SSLv2_client_method(void); /使用使用SSLv2 SSLv2 协议协议 SSL_METHOD SSL_METHOD* * SSLv3_client_method(void); / SSLv3_clie
43、nt_method(void); /使用使用SSLv3 SSLv3 协议协议 SSL_METHOD SSL_METHOD* * SSLv23_client_method(void); / SSLv23_client_method(void); /使用使用SSLv2/v3 SSLv2/v3 协议协议9.3.6 加载和使用证书加载和使用证书1 1设置证书验证的方式设置证书验证的方式2 2加载证书加载证书3 3加载私钥文件加载私钥文件1设置证书验证的方式设置证书验证的方式p可以调用可以调用SSL_CTX_set_verify()SSL_CTX_set_verify()函数设函数设置证书验证的方式,函
44、数原型如下:置证书验证的方式,函数原型如下:Void SSL_CTX_set_verify(SSL_CTX Void SSL_CTX_set_verify(SSL_CTX * *ctx, ctx, int mode, int (int mode, int (* *verify_callback)(int,verify_callback)(int,X509_STORE_CTX X509_STORE_CTX * *););2加载证书加载证书int int SSL_CTX_load_verify_locations(SSL_CSSL_CTX_load_verify_locations(SSL_CTX
45、 TX * *ctx, const char ctx, const char * *CAfile,CAfile, const char const char * *CApath);CApath);int int SSL_CTX_use_certificate_file(SSL_CTX SSL_CTX_use_certificate_file(SSL_CTX * *ctx, const char ctx, const char * *file, int type);file, int type);3加载私钥文件加载私钥文件int int SSL_CTX_use_PrivateKey_file(S
46、SL_CTSSL_CTX_use_PrivateKey_file(SSL_CTX X * *ctx, const char ctx, const char * *file, int type);file, int type);int int SSL_CTX_check_private_key(SSL_CTX SSL_CTX_check_private_key(SSL_CTX * *ctx)ctx)9.3.7 SSL套接字套接字p1 1SSL_new()SSL_new()p2 2SSL_set_rfd ()SSL_set_rfd ()1SSL_new()pSSL_new()SSL_new()函数
47、用于申请一个函数用于申请一个SSL SSL 套接字套接字,函数原型如下:,函数原型如下:SSL SSL * *SSL_new(SSL_CTX SSL_new(SSL_CTX * *ctx);ctx);p参数参数ctxctx指定当前的指定当前的SSLSSL连接环境(连接环境(CTXCTX)指针。指针。p如果操作成功则返回指向分配的如果操作成功则返回指向分配的SSLSSL结构结构体的指针;否则返回体的指针;否则返回NULLNULL。可以将分配。可以将分配的的SSLSSL结构体绑定到一个套接字,从而得结构体绑定到一个套接字,从而得到到SSLSSL套接字。具体方法将在稍后介绍。套接字。具体方法将在稍后
48、介绍。2SSL_set_rfd ()pSSL_set_rfd ()SSL_set_rfd ()函数用于绑定只读套接函数用于绑定只读套接字,函数原型如下:字,函数原型如下:int SSL_set_rfd(SSL int SSL_set_rfd(SSL * *ssl, int fd);ssl, int fd);参数说明如下:参数说明如下: ssl ssl,SSLSSL结构体指针。结构体指针。 fd fd,绑定到,绑定到sslssl的只读套接字句柄。的只读套接字句柄。如果操作成功则返回如果操作成功则返回1 1;否则返回;否则返回0 0。9.3.8 OpenSSL握手握手1 1SSL_connect(
49、)SSL_connect()2 2SSL_read()SSL_read()3 3SSL_write()SSL_write()4 4SSL_accept ()SSL_accept ()1SSL_connect()SSL_connect()SSL_connect()函数用于初始化与函数用于初始化与TLS/SSLTLS/SSL服务器的握手过程,也就是建立于服务器的握手过程,也就是建立于TLS/SSLTLS/SSL服务器的连接。服务器的连接。SSL_connect()SSL_connect()函数用于替函数用于替代传统的代传统的connect()connect()函数。函数原型如下:函数。函数原型如下
50、:int SSL_connect(SSL int SSL_connect(SSL * *ssl);ssl);参数参数sslssl为为SSLSSL结构体指针。结构体指针。如果操作成功则返回如果操作成功则返回1 1;如果握手失败,但;如果握手失败,但是根据是根据TLS/SSLTLS/SSL协议关闭了协议关闭了SocketSocket,则返回,则返回0 0。如果握手失败,但是并没有关闭。如果握手失败,但是并没有关闭SocketSocket,则返回小于,则返回小于0 0的值。的值。2SSL_read()SSL_read()SSL_read()函数用于从函数用于从TLS/SSLTLS/SSL连接读取字连
51、接读取字节。节。SSL_read()SSL_read()函数用于替代传统的函数用于替代传统的read()read()函数。函数原型如下:函数。函数原型如下:int SSL_read(SSL int SSL_read(SSL * *ssl, void ssl, void * *buf, int buf, int num);num);参数说明如下:参数说明如下: ssl ssl,SSLSSL结构体指针。结构体指针。 buf buf,用于接收数据的缓存区指针。,用于接收数据的缓存区指针。 num num,指定读取的字节数。,指定读取的字节数。如果操作成功则返回读取的字节数。如果操作成功则返回读取的字
52、节数。3SSL_write()pSSL_write ()SSL_write ()函数用于向函数用于向TLS/SSLTLS/SSL连接写连接写入字节。入字节。SSL_write ()SSL_write ()函数用于替代传函数用于替代传统的统的write ()write ()函数。函数原型如下:函数。函数原型如下:pint SSL_write(SSL int SSL_write(SSL * *ssl, const void ssl, const void * *buf, buf, int num);int num);p参数说明如下:参数说明如下:p ssl ssl,SSLSSL结构体指针。结构体指
53、针。p buf buf,发送数据的缓存区指针。,发送数据的缓存区指针。p num num,指定发送的字节数。,指定发送的字节数。p如果操作成功则返回读取的字节数。如果操作成功则返回读取的字节数。4SSL_accept ()pSSL_acceptSSL_accept函数由服务器程序调用用于函数由服务器程序调用用于等待客户端连接。等待客户端连接。SSL_accept ()SSL_accept ()函数用函数用于替代传统的于替代传统的accept()accept()函数。函数原型函数。函数原型如下:如下:int SSL_accept(SSL int SSL_accept(SSL * *ssl);ss
54、l);p参数参数sslssl是是SSLSSL结构体指针。结构体指针。pSSL_accept()SSL_accept()函数依赖底层的函数依赖底层的BIOBIO结构。结构。BIOBIO是抽象的是抽象的IOIO接口,是覆盖了许多类型接口,是覆盖了许多类型I/OI/O接口细节的一种应用接口。接口细节的一种应用接口。9.3.9 通讯结束通讯结束1 1SSL_shutdown ()SSL_shutdown ()2 2SSL_free ()SSL_free ()3 3SSL_CTX_free ()SSL_CTX_free ()1SSL_shutdown ()pSSL_shutdown()SSL_shutd
55、own()函数用于关闭一个函数用于关闭一个TLS/SSLTLS/SSL连接。函数原型如下:连接。函数原型如下:int SSL_shutdown(SSL int SSL_shutdown(SSL * *ssl); ssl); p参数参数sslssl是要关闭的是要关闭的SSLSSL结构体指针。结构体指针。p如果操作成功,则如果操作成功,则SSL_ shutdown()SSL_ shutdown()返回返回1 1。2SSL_free ()pSSL_shutdown()SSL_shutdown()函数用于释放函数用于释放SSLSSL套接字套接字。函数原型如下:。函数原型如下:void SSL_free
56、(SSL void SSL_free(SSL * *ssl);ssl);p参数参数sslssl是要释放的是要释放的SSLSSL套接字。套接字。3SSL_CTX_free ()pSSL_shutdown()SSL_shutdown()函数用于释放函数用于释放SSLSSL环境。环境。函数原型如下:函数原型如下:void SSL_free(SSL void SSL_free(SSL * *ssl);ssl);p参数参数sslssl是要释放的是要释放的SSLSSL环境。环境。9.4 OpenSSL 编程实例编程实例p9.4.1 9.4.1 制作制作SSLSSL证书证书p9.4.2 9.4.2 开发基于
57、开发基于OpenSSLOpenSSL的服务器程序的服务器程序p9.4.3 9.4.3 开发基于开发基于OpenSSLOpenSSL的客户端程序的客户端程序9.4.1 制作制作SSL证书证书1 1生成服务器端的私钥文件生成服务器端的私钥文件2 2生成服务器端的生成服务器端的CSRCSR文件文件3 3生成生成CACA证书证书4 4生成客户端的私钥文件生成客户端的私钥文件5 5生成客户端的生成客户端的CSRCSR文件文件6 6生成服务器端证书文件生成服务器端证书文件7 7生成客户端证书文件生成客户端证书文件1生成服务器端的私钥文件生成服务器端的私钥文件使用使用openssl genrsaopenss
58、l genrsa命令可以生成命令可以生成rsarsa私钥文件私钥文件。这里执行下面的命令:。这里执行下面的命令:opensslgenrsa-des3-outserver.key1024opensslgenrsa-des3-outserver.key1024参数参数-des3-des3指定使用指定使用DESDES算法进行加密;参数算法进行加密;参数-out-out指定输出生成的私钥文件是指定输出生成的私钥文件是server.keyserver.key。密钥长。密钥长度是度是1024bit1024bit。执行命令后首先需要输入并确认私钥文件文件的执行命令后首先需要输入并确认私钥文件文件的密码,这里
59、假定为密码,这里假定为123456123456。以后在使用到私钥文。以后在使用到私钥文件件server.keyserver.key时需要使用该密码。时需要使用该密码。2生成服务器端的生成服务器端的CSR文件文件使用使用openssl reqopenssl req命令可以生成证书请求,以让命令可以生成证书请求,以让CACA来签发来签发、生成我们需要的证书。这里执行下面的命令:、生成我们需要的证书。这里执行下面的命令:opensslreq-new-keyserver.key-outserver.csr-opensslreq-new-keyserver.key-outserver.csr-confi
60、gopenssl.cfgconfigopenssl.cfg参数参数-new-new生成一个新的证书请求,并提示用户输入个人信生成一个新的证书请求,并提示用户输入个人信息;参数息;参数-key-key指定使用的私钥文件;参数指定使用的私钥文件;参数-out-out指定输出生指定输出生成的成的CSRCSR文件是文件是server.csrserver.csr。-config-config指定使用的配置文件指定使用的配置文件。在有些版本的。在有些版本的OpenSSLOpenSSL中,配置文件为中,配置文件为f 。执行命令后首先需要输入私钥文件执行命令后首先需要输入私钥文件server.keyserve
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全素养培训内容2026年知识体系
- 2026年岗前安全责任制培训内容专项突破
- 植树节的一天作文6篇
- 呼伦贝尔市牙克石市2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 荆州市公安县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 上饶市弋阳县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 贺州市昭平县2025-2026学年第二学期三年级语文第六单元测试卷(部编版含答案)
- 潍坊市安丘市2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 齐齐哈尔市建华区2025-2026学年第二学期四年级语文第六单元测试卷(部编版含答案)
- 乌兰察布盟商都县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 医疗耗材销售培训课件
- 车位买卖合同补充协议样本
- 2025年学历类高职单招智能制造类-化学参考题库含答案解析(5套试卷)
- 第8课 动物的耳朵 课件 青岛版六三制一年级科学下册
- 零件CAM软件编程-CAXA制造工程师 课件全套任务1-7 CAXA 制造工程师 2022 软件功能认知-壳体加工
- IPC-4552B-2024EN印制板化学镀镍浸金(ENIG)镀覆性能规范英文版
- 化工安全工程概论-第五章
- GB/T 4340.3-2025金属材料维氏硬度试验第3部分:标准硬度块的标定
- 浙江省公路工程质检资料管理文件用表
- 西部计划考试考题及答案
- 全国职业院校技能大赛高职组(市政管线(道)数字化施工赛项)考试题库(含答案)
评论
0/150
提交评论