第19章 利用OpenSSL实现安全的Web Server程序

合集下载

OpenSSL简单介绍

OpenSSL简单介绍

OpenSSL简单介绍本⽂对密码学中常⽤的底层库OpenSSL进⾏简单说明,包括基本介绍、简单使⽤等内容。

简单介绍是密码学中⼀个流⾏的底层密码库,也是SSL和TLS最常见的开源实现。

SSL全称为Secure Sockets Layer,安全套接层协议( 对⽹络连接进⾏加密处理 )。

TLS全称为Transport Layer Security,安全传输层协议(由记录协议和握⼿协议组成 )。

SSL协议由Netscape(⽹景)公司开发,因为应⽤⼴泛,到了1999年SSL已经成为互联⽹上的事实标准。

同年,IETF把SSL标准化后改名为TLS,它建⽴在SSL 3.0协议规范上,是SSL的后续版本。

TLS 和 SSL,两者差别极⼩,可以简单看做是同⼀个东西的两个不同阶段。

是由⼀些志愿者合作开发的开源⼯具库,其⽬标是开发⼀个强壮的、具有完备功能的商业级⼯具集,以实现SSL 和 TLS协议以及⼀个全功能的通⽤加密库。

OpenSSL主要以C语⾔实现,⽬前最新稳定版本为2018年9⽉11⽇发布的1.1.1版本。

OpenSSL的主要组成❏ openssl 多⽤途的命令⾏⼯具。

❏ libcrypto 常⽤加密算法库。

❏ libssl 实现了SSL及TLS的加密模块应⽤库。

⽀持许多不同的加密算法:其中包括但不限于单向散列函数的、、MD2、、、、RIPEMD-160、MDC-2、GOST R 34.11-94、BLAKE2、Whirlpool、SM3等算法,对称加密有、Blowfish、Camellia、Chacha20、Poly1305、SEED、CAST-128、、IDEA、RC2、RC4、、SM4、TDES、GOST 28147-89等算法,以及⾮对称加密的、DSA、迪菲-赫尔曼密钥交换、椭圆曲线、SM2、X25519、Ed25519、X448、Ed448、GOST R 34.10-2001等算法。

参考资料opsnssl 命令⾏简单说明的安装通常,很多操作系统都会默认安装OpenSSL ⼯具,我们可以通过在终端中输⼊openssl version命令来查看和进⾏验证。

利用OpenSSL实现IIS服务器安全通信

利用OpenSSL实现IIS服务器安全通信

第11卷第1期沙洲职业工学院学报V ol. 11, No.1 2008年3月 Journal of Shazhou Professional Institute of Technology Mar. , 2008 利用OpenSSL实现IIS服务器安全通信汤建龙,陆国浩(沙洲职业工学院,江苏张家港 215600)摘要:简述了基于SSL的信息安全通道的原理及应用,介绍了利用OpenSSL软件包在windows 2000 server上IIS服务器搭建一条基于SSL的信息安全通道的过程,其中包括对CA服务的配置,WEB服务器端证书的申请、安装和配置,以及客户端和服务端SSL的通信过程。

关键词:OpenSSL;IIS;证书中图分类号:TP39 文献标识码:A 文章编号:1009-8429(2008)01-0012-05Realizing the Secure Communication on the IIS server with the OpenSSLTANG Jian-long,LU Guo-hao( Shazhou Professional Institute of Technology, Zhangjiagang 215600, China )Abstract: This paper summarizes the principle and the application of SSL-based information security channel, introduces the process for the SSL-based information security channel with the Open SSL software package on the Windows 2000 server and the IIS server, including the CA service configuration, the application for, the installation as well as the disposition of the WEB server certificate, and the SSL course of communications between the client end and the server end.Key words: OpenSSL; IIS; Certificate0 引言随着计算机网络技术的发展,互连网成为人们日常生活中获取信息的主要方式之一。

OpenSSL命令---s_client

OpenSSL命令---s_client

OpenSSL命令---s_client/as3luyuan123/article/details/16812071⽤途:s_client为⼀个SSL/TLS客户端程序,与s_server对应,它不仅能与s_server进⾏通信,也能与任何使⽤ssl协议的其他服务程序进⾏通信。

⽤法:[cpp]1. openssl s_client [-host host] [-port port] [-connect host:port] [-verify depth] [-cert filename]2. [-certform DER|PEM] [-key filename] [-keyform DER|PEM] [-pass arg] [-CApath directory] [-CAfile filename]3. [-reconnect][-pause] [-showcerts] [-debug] [-msg] [-state] [-nbio_test] [-nbio][-crlf] [-ign_eof] [-no_ign_eof]4. [-quiet] [-ssl2] [-ssl3] [-tls1_1] [-tls1_2] [-tls1] [-dtls1] [-no_ssl2][-no_ssl3] [-no_tls1] [-no_tls1_1]5. [-no_tls1_2] [-bugs] [-cipher cipherlist] [-starttls protocol] [-engine id] [-tlsextdebug] [-no_ticket]6. [-sess_out filename] [-sess_in filename] [-rand file(s)]选项说明:-host host:设置服务地址。

-port port:设置服务端⼝,默认为4433。

-connect host:port:设置服务器地址和端⼝号。

利用OpenSSL库对Socket传输进行安全加密(RSA+AES)

利用OpenSSL库对Socket传输进行安全加密(RSA+AES)

利⽤OpenSSL库对Socket传输进⾏安全加密(RSA+AES)轉⾃:/uid-9543173-id-3921143.html利⽤OpenSSL库对Socket传输进⾏安全加密(RSA+AES)1. 利⽤RSA安全传输AES⽣成密钥所需的Seed(32字节)2. 利⽤AES_encrypt/AES_decrypt对Socket上⾯的业务数据进⾏AES加密/解密理论上只需要AES就能保证全部流程,但由于AES加密所需要的AES-KEY是⼀个结构。

这个⼀个结构,如果通过⽹络进⾏传输,就需要对它进⾏⽹络编码,OpenSSL⾥⾯没有现成的API所以就引⼊RSA来完成⾸次安全的传输,保证Seed不会被窃听。

同样,只使⽤RSA也能完成全部流程,但由于RSA的处理效率⽐AES低,所以在业务数据传输加密上还是使⽤AES下⾯的代码包含了上述传输加密流程所需的所有步骤(OpenSSL部分)在实际的Socket应⽤开发时,需要将这些步骤插⼊到Client/Server⽹络通信的特定阶段所需的OpenSSL主要的API及功能描述1. RSA_generate_key() 随机⽣成⼀个RSA密钥对,供RSA加密/解密使⽤2. i2d_RSAPublicKey() 将RSA密钥对⾥⾯的公钥提出到⼀个BUF,⽤于⽹络传输给对⽅3. d2i_RSAPublicKey() 将从⽹络传过来的公钥信息⽣成⼀个加密使⽤的RSA(它⾥⾯只有公钥)4. RSA_public_encrypt() 使⽤RSA的公钥对数据进⾏加密5. RSA_private_decrypt() 使⽤RSA的私钥对数据进⾏解密6. AES_set_encrypt_key() 根据Seed⽣成AES密钥对中的加密密钥7. AES_set_decrypt_key() 根据Seed⽣成AES密钥对中的解密密钥8. AES_encrypt() 使⽤AES加密密钥对数据进⾏加密9. AES_decrypt() 使⽤AES解密密钥对数据进⾏解密⼀个典型的安全Socket的建⽴流程, 其实就是如何将Server随机Seed安全发给ClientC: Client S:ServerC: RSA_generate_key() --> RSAKey --> i2d_RSAPublicKey(RSAKey) --> RSAPublicKeyC: Send(RSAPublicKey) TO ServerS: Recv() --> RSAPublicKey --> d2i_RSAPublicKey(RSAPublicKey) --> RSAKeyS: Rand() --> Seed --> RSA_public_encrypt(RSAKey, Seed) --> EncryptedSeedS: Send(EncryptedSeed) TO ClientC: Recv() --> EncryptedSeed --> RSA_private_decrypt(RSAKey, EncryptedSeed) --> Seed--- 到此, Client和Server已经完成完成传输Seed的处理--- 后⾯的流程是它们怎样使⽤这个Seed来进⾏业务数据的安全传输C: AES_set_encrypt_key(Seed) --> AESEncryptKeyC: AES_set_decrypt_key(Seed) --> AESDecryptKeyS: AES_set_encrypt_key(Seed) --> AESEncryptKeyS: AES_set_decrypt_key(Seed) --> AESDecryptKey--- Client传输数据给ServerC: AES_encrypt(AESEncryptKey, Data) --> EncryptedData --> Send() --> ServerS: Recv() --> EncryptedData --> AES_decrypt(AESDecryptKey, EncryptedData) --> Data--- Server传输数据给ClientS: AES_encrypt(AESEncryptKey, Data) --> EncryptedData --> Send() --> ClientC: Recv() --> EncryptedData --> AES_decrypt(AESDecryptKey, EncryptedData) --> Data流程图如下:相关的代码实现如下:#include <string.h>#include <openssl/rsa.h>#include <openssl/aes.h>int main(){// 1. 产⽣RSA密钥对// 产⽣512字节公钥指数为RSA_F4的密钥对,公钥指数有RSA_F4和RSA_3两种// 我不清楚它们的区别,就随便选定RSA_F4// 可以使⽤RSA_print_fp()看看RSA⾥⾯的东西RSA *ClientRsa = RSA_generate_key(512, RSA_F4, NULL, NULL);// ---------// 2. 从RSA结构中提取公钥到BUFF,以便将它传输给对⽅// 512位的RSA其公钥提出出来长度是74字节,⽽私钥提取出来有超过300字节// 为保险起见,建议给它们预留⼀个512字节的空间unsigned char PublicKey[512];unsigned char *PKey = PublicKey; // 注意这个指针不是多余,是特意要这样做的,int PublicKeyLen = i2d_RSAPublicKey(ClientRsa, &PKey);// 不能采⽤下⾯的⽅法,因为i2d_RSAPublicKey()会修改PublicKey的值// 所以要引⼊PKey,让它作为替死⿁// unsigned char *PublicKey = (unsigned char *)malloc(512);// int PublicKeyLen = i2d_RSAPublicKey(ClientRsa, &PublicKey);// 逐个字节打印PublicKey信息printf("PublicKeyBuff, Len=%d\n", PublicKeyLen);for (int i=0; i<PublicKeyLen; i++){printf("0x%02x, ", *(PublicKey+i));}printf("\n");// ---------// 3. 跟据上⾯提出的公钥信息PublicKey构造⼀个新RSA密钥(这个密钥结构只有公钥信息)PKey = PublicKey;RSA *EncryptRsa = d2i_RSAPublicKey(NULL, (const unsigned char**)&PKey, PublicKeyLen);// ---------// 4. 使⽤EncryptRsa加密数据,再使⽤ClientRsa解密数据// 注意, RSA加密/解密的数据长度是有限制,例如512位的RSA就只能最多能加密解密64字节的数据// 如果采⽤RSA_NO_PADDING加密⽅式,512位的RSA就只能加密长度等于64的数据// 这个长度可以使⽤RSA_size()来获得unsigned char InBuff[64], OutBuff[64];strcpy((char *)InBuff, "1234567890abcdefghiklmnopqrstuvwxyz.");RSA_public_encrypt(64, (const unsigned char*)InBuff, OutBuff, EncryptRsa, RSA_NO_PADDING); // 加密 memset(InBuff, 0, sizeof(InBuff));RSA_private_decrypt(64, (const unsigned char*)OutBuff, InBuff, ClientRsa, RSA_NO_PADDING); // 解密 printf("RSADecrypt OK: %s \n", InBuff);// ----------// 5. 利⽤随机32字节Seed来产⽣256位的AES密钥对unsigned char Seed[32]; // 可以采⽤Rand()等⽅法来构造随机信息AES_KEY AESEncryptKey, AESDecryptKey;AES_set_encrypt_key(Seed, 256, &AESEncryptKey);AES_set_decrypt_key(Seed, 256, &AESDecryptKey);// ----------// 6. 使⽤AES密钥对来加密/解密数据// 注意,256位的AES密钥只能加密/解密16字节长的数据strcpy((char *)InBuff, "a1b2c3d4e5f6g7h8?");AES_encrypt(InBuff, OutBuff, &AESEncryptKey);memset(InBuff, 0, sizeof(InBuff));AES_decrypt(OutBuff, InBuff, &AESDecryptKey);printf("AESDecrypt OK: %s \n", InBuff);// ----------// 7. 谨记要释放RSA结构RSA_free(ClientRsa);RSA_free(EncryptRsa);return(0);}。

openssl做证书的方法 -回复

openssl做证书的方法 -回复

openssl做证书的方法-回复OpenSSL 是一个开源的软件包,可用于创建安全套接字层(SSL)和传输层安全性(TLS)协议的证书。

证书是用于身份验证和数据加密的数字文件。

下面将一步一步介绍OpenSSL 的使用方法来生成证书。

第一步:安装OpenSSL首先,您需要安装OpenSSL 软件包。

根据您的操作系统,可以在OpenSSL 官方网站(OpenSSL 在您的系统上可用。

第二步:生成私钥要生成证书,首先需要生成一个私钥。

私钥用于生成和验证证书,因此它必须严格保密。

您可以使用以下命令在命令行中生成私钥:openssl genpkey -algorithm RSA -out private.key此命令将使用RSA 算法生成一个私钥,并将其保存在private.key 文件中。

确保将文件保存在安全的位置,并为其设置适当的权限,以防止未经授权访问。

第三步:生成证书请求生成了私钥后,接下来需要生成证书请求。

证书请求包含您的公钥以及有关您身份的信息。

以下命令将生成证书请求:openssl req -new -key private.key -out certificate.csr在此命令中,-key 参数指定您的私钥文件,-out 参数指定将保存证书请求的文件名。

您将被要求输入与您身份相关的信息,如名称、单位、电子邮件地址等。

确保在输入这些信息时提供准确的数据。

第四步:自签名证书生成证书请求后,您可以使用OpenSSL 生成一个自签名证书。

自签名证书是由您自己颁发的,因此在一些特定情况下可能不被所有设备或应用程序接受。

但它在测试和开发环境中非常有用。

以下命令将生成自签名证书:openssl x509 -req -in certificate.csr -signkey private.key -out certificate.crt此命令使用您之前生成的私钥和证书请求来创建一个自签名证书。

最后的证书将保存在certificate.crt 文件中。

openssl3 手册

openssl3 手册

openssl3 手册摘要:1.OpenSSL3 简介2.OpenSSL3 的安装与配置3.OpenSSL3 的功能与应用4.OpenSSL3 的安全性5.OpenSSL3 的未来发展正文:【OpenSSL3 简介】OpenSSL3 是一个强大的安全套接字层(SSL)库,用于加密网络通信。

它是OpenSSL2 的升级版本,提供了许多改进和新功能。

OpenSSL3 提供了广泛的加密和签名算法,支持各种安全协议,如TLS、SSL、DTLS 等。

它广泛应用于Web 服务器、客户端应用程序和各种网络设备中,保障网络通信的安全性。

【OpenSSL3 的安装与配置】安装OpenSSL3 非常简单,只需从官方网站下载源代码并按照官方文档进行编译和安装即可。

安装完成后,需要对OpenSSL3 进行配置,包括设置加密算法、证书、密钥等。

配置过程可以通过命令行工具或编译时选项完成。

【OpenSSL3 的功能与应用】OpenSSL3 提供了许多功能,包括加密、签名、哈希等。

它可以用于保护网络通信、数字签名文件、加密文件等。

OpenSSL3 还支持各种安全协议,如TLS、SSL、DTLS 等,可以满足各种应用场景的需求。

【OpenSSL3 的安全性】OpenSSL3 非常注重安全性,采用了多种措施来保障通信的安全性。

它支持多种加密算法,如AES、RSA、ECC 等,可以根据需求选择合适的加密算法。

此外,OpenSSL3 还支持证书验证、密钥交换、哈希函数等,可以有效防止各种攻击。

【OpenSSL3 的未来发展】随着网络通信的不断发展,OpenSSL3 将继续完善和升级,以适应新的需求。

未来,OpenSSL3 可能会引入更多的加密算法、支持更多的安全协议,并继续提高安全性能。

同时,OpenSSL3 还将加强与其他安全技术的集成,如IPsec、TLS 等,以提供更全面的安全解决方案。

总之,OpenSSL3 是一个重要的安全库,用于加密网络通信。

openssl使用流程

openssl使用流程

openssl使用流程OpenSSL使用流程介绍OpenSSL 是一个开源的加密工具包和安全通信协议实现库,提供了一系列的加密算法、SSL/TLS 防护和各种安全工具,广泛应用于网络通信、服务器配置、数字证书管理等各个领域。

本文将以OpenSSL 的使用流程为主题,一步一步详细回答。

一、准备工作1. 下载和安装OpenSSL:首先,我们需要从OpenSSL 的官方网站或其他可信来源下载并安装OpenSSL。

根据操作系统的不同,选择相应的版本进行下载和安装。

2. 生成RSA 密钥对:在开始使用OpenSSL 之前,建议先生成一对RSA 密钥对,用于后续的加密和解密操作。

在命令行中输入以下命令可以生成一个2048 位的RSA 密钥对:openssl genrsa -out private.key 2048该命令将生成一个名为private.key 的私钥文件,其中包含了生成的RSA 私钥。

接着,可以使用以下命令生成对应的公钥文件:openssl rsa -in private.key -pubout -out public.key这将生成一个名为public.key 的公钥文件,其中包含了与私钥对应的RSA 公钥。

二、公钥加密和私钥解密1. 加密数据:使用公钥加密数据是一种常见的操作,可以保证数据在传输过程中的机密性。

在命令行中输入以下命令可以使用公钥对数据进行加密:openssl rsautl -encrypt -pubin -inkey public.key -in plaintext.txt -out ciphertext.enc该命令将使用public.key 中的公钥对plaintext.txt 中的明文数据进行加密,并将密文数据存储到ciphertext.enc 文件中。

2. 解密数据:解密数据需要使用对应的私钥进行操作。

在命令行中输入以下命令可以使用私钥对密文数据进行解密:openssl rsautl -decrypt -inkey private.key -in ciphertext.enc -out plaintext.txt该命令将使用private.key 中的私钥对ciphertext.enc 中的密文数据进行解密,并将解密后的明文数据存储到plaintext.txt 文件中。

基于openssl的安全web服务器开发

基于openssl的安全web服务器开发
届别
学 号
毕业设计(论文)
基于Openssl的安全Web服务器开发
一、综述国内外对本课题的研究动态,说明选题的依据和意义
随着计算机及通讯技术的飞速发展,信息安全已经渗透到社会经济生活的各个方面,对社会进步与经济发展起着越来越重要的作用,也使人们的工作甚至生活方式发生了巨大的变革。网络规模的激增,网络复杂性和异构性的焦点化,使得网络安全问题上升到了的战略性位置。
随着信息数字化以及计算机应用的发展,对存储在计算机中的文件和其它数字信息的保护需求成为了一种必然,尤其对一个能够通过公共网络进入的共享系统来说,这种需求显得尤为迫切。针对这种需求目前发展起来的技术有防病毒技术和防火墙技术等等。有些文献将这些保护数据、阻挡非法数据访问的技术统称为计算机安全或系统安全技术。
(3)安全验证加密的另外一个用途是用来作为个人的标识,用户的密钥可以作为他的安全验证的标识。SSL是利用公开密钥的加密技术(RSA)来作为用户端与服务器端在传送机密资料时的加密通讯协定。
信息安全是自古以来就存在的概念,比如以前为了保证传递书信的保密性,使用腊封或其它方式将书信封装在信封内;还有使用暗号口令确认接受信息的人的身份等等方法。需要注意的是,信息安全技术是跟信息的载体形式和传送媒介密切相关的,信息载体的变化和信息传送媒介的变化必然会导致信息安全技术的变化发展。
在过去的二十多年中,信息技术取得令人惊异的发展,越来越多的有价值的信息和资料以数字信息存放在计算机等数字信息存储设备中。与此同时,信息共享技术也获得了巨大的突破,以Internet的发展为代表,短短的时间内,从美国军方的一个专用网络发展到联系着全世界千千万万人的膨大信息网络。这些客观的变化导致对信息安全的要求发生了重大的变化。
(1)数据的保密性信息加密就是把明码的输入文件用加密算法转换成加密的文件以实现数据的保密。加密的过程需要用到密钥来加密数据然后再解密。没有了密钥,就无法解开加密的数据。数据加密之后,只有密钥要用一个安全的方法传送。加密过的数据可以公开地传送。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
15
《计算机网络高级软件编程技术》
客户端与服务器的握手过程
1、发 出 SSL 握手信 号 证书 服务器 出示
应并 2、回
浏 览 器
3、验证服务器证 书,产生会话密钥 4、用服务器公 钥加密会话密钥 5、将加 密后的 会话密 钥
服 务 器
发给服 务器
6、解密得到 会话密钥 7、使用共享的会话密钥加密 通信,安全通道建立
18
《计算机网络高级软件编程技术》
Server端认证证书的生成
建立CA中心



生成CA中心的私钥 openssl req -newkey rsa:1024 -sha1 -keyout rootkey.pem -out rootreq.pem 生成CA中心的自签证书 openssl x509 -req -in rootreq.pem -sha1 -extensions v3_ca days 365 -signkey rootkey.pem -out rootcert.pem 生成Web服务器的私钥和认证请求 openssl req -newkey rsa:1024 -sha1 -keyout serverkey.pem out serverreq.pem
• OpenSSL为用户提供的命令行接口功能 非常丰富,如创建和管理证书、生成消 息摘要、加密和解密文件等 • 其命令行格式如下: openssl command [ command_opts ] [ command_args ]

command可以为x509、md5、sha1、des、 idea等
19
《计算机网络高级软件编程技术》
提纲
• • • • •
编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高
20
《计算机网络高级软件编程技术》
扩展与提高
客户端认证

OpenSSL提供的相关API如下: 设置可信CA证书文件 int SSL_CTX_load_verify_locations( SSL_CTX *ctx, const char * cafile, const char * cadir); 设置认证模式 int SSL_CTX_set_verify(SSL_CTX *ctx, int mode, int (*verify_callback) (int, X509_STORE_CTX *)); 使用双向认证模式需要将mode的值置为: SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT
“十一五”国家重点图书 计算机科学与技术学科前沿丛书
计算机科学与技术学科研究生系列教材(中文版)
计算机网络 高级软件编程技术
吴功宜 董大凡 王 珺 刘 乾
1
《计算机网络高级软件编程技术》
第19章
利用OpenSSL实现安全 的Web Server程序
2
《计算机网络高级软件编程技术》
概述
由于HTTP采用明文传输,因此网络传输 中的重要数据有被第三方截获的危险。 HTTPS使用SSL在发送方将原始数据进 行加密,然后在接收方进行解密,有利于 Web数据的安全传输
3
《计算机网络高级软件编程技术》
提纲
• • • • •
编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高
4
《计算机网络高级软件编程技术》
编程训练目的
• 在基础类编程训练10的基础上,掌握基 于OpenSSL协议的安全Web Server的软 件结构的设计与编程实现 • 掌握利用OpenSSL生成认证证书的方法 • 熟悉客户端认证与利用IPSec实现安全通 信的方法
17
《计算机网络高级软件编程技术》
程序主要部分的实现(续)
3. 创建一个流式套接字在某个端口侦听 4. 创建ListenThread线程,接受客户端连 接请求 5. 创建ClientThread线程处理客户请求 6. 关闭连接并释放相关资源
// 在ClientThread线程完成客户端的请求后,需要释放以下资源: SSL_shutdown(ssl); // 关闭SSL连接 SSL_free(ssl); // 释放SSL结构 // 在服务器结束服务之前还需要释放在第2步中创建的SSL上下文环境: SSL_CTX_free(ctx);
IPSec尾
新IP头 IPSec头
IP头《计算机网络高级软件编程技术》
为Web服务器签发证书
openssl x509 -req -in serverreq.pem -sha1 -extensions usr_cert -CA rootcert.pem -CAkey rootkey.pem -CAcreateserial -out server.pem server.pem即为CA中心为Web服务器签发的证书
13
《计算机网络高级软件编程技术》
OpenSSL的编程接口
• • • • • 初始化OpenSSL库 建立上下文环境 建立连接 使用连接完成应用数据交换 关闭连接并释放相关资源
14
《计算机网络高级软件编程技术》
提纲
• • • • •
编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高
21

《计算机网络高级软件编程技术》
扩展与提高
基于IPSec的安全通信
1. IPSec体系结构
22
《计算机网络高级软件编程技术》
扩展与提高
基于IPSec的安全通信
2. IPSec工作模式
原始数据包: 传输模式下的数据包: 隧道模式下的数据包: IP头 TCP头 数据 数据
IP头
IPSec头 TCP头
《计算机网络高级软件编程技术》
OpenSSL库
• OpenSSL库的安装

安装VC++ 6.0 从官方网站/ActivePerl 下载ActivePerl的Win32版本并安装 从官方网站/下载OpenSSL 源代码并安装

7
《计算机网络高级软件编程技术》
程序运行的参考界面
8
《计算机网络高级软件编程技术》
提纲
• • • • •
编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高
9
《计算机网络高级软件编程技术》
SSL协议 • SSL协议栈
10
《计算机网络高级软件编程技术》
SSL握手协议
工作过程
11
16
《计算机网络高级软件编程技术》
程序主要部分的实现
1. 初始化OpenSSL库
SSL_library_init(); SSL_load_error_strings(); // 加载OpenSSL将会用到的算法 // 加载错误字符串
2. 建立上下文环境
SSL_METHOD *meth; SSL_CTX *ctx; //SSL_CTX对象 meth = SSLv23_method(); //相应的SSL结构能理解SL2.0、3.0以及TSL1.0 ctx = SSL_CTX_new(meth); //创建一个上下文环境 //指定所使用的证书文件 SSL_CTX_use_certificate_chain_file(ctx, “server.pem”); //设置密码回调函数 SSL_CTX_set_default_passwd_cb(ctx, password_cb); // 加载私钥文件 SSL_CTX_use_PrivateKey_file(ctx,“server.pem”,SSL_FILETYPE_PEM)); // 加载受信任的CA证书 SSL_CTX_load_verify_locations(ctx, "root.pem", 0);
在VC的Include files中增加[OpenSSL]\inc32目录 在Libray files中增加[openssl-0.9.8]\out32dll目录 其中,[OpenSSL]表示OpenSSL的安装目录
12

编程环境设置

《计算机网络高级软件编程技术》
OpenSSL的命令行接口
5
《计算机网络高级软件编程技术》
提纲
• • • • •
编程训练目的 编程训练要求 相关知识介绍 程序设计分析 扩展与提高
6
《计算机网络高级软件编程技术》
编程训练要求
编写程序,利用OpenSSL实现安全的Web Server,具体要求如下 :
• • • Server启动时可指定端口,缺省为443 可指定Web Server根目录的路径,比如C:\Server Server应能够并发处理多个请求,要求至少能支持 Get命令。可以增强Web Server的功能,如支持 Head、Post以及Delete命令等 书写必要的客户端测试程序用于发送HTTPS请求并 显示返回结果,也可使用一般的Web浏览器测试
相关文档
最新文档