信息安全试验报告四.docx
- 文档编号:5615074
- 上传时间:2022-12-29
- 格式:DOCX
- 页数:11
- 大小:570.26KB
信息安全试验报告四.docx
《信息安全试验报告四.docx》由会员分享,可在线阅读,更多相关《信息安全试验报告四.docx(11页珍藏版)》请在冰豆网上搜索。
信息安全试验报告四
山东大学软件学院
信息安全导论课程实验报告
学号:
201300301385
姓名:
周强
班级:
2013级八班
实验题目:
OpenSSL实验:
一个安全聊天程序
实验学时:
日期:
实验目的:
(1)掌握OpenSSL库中SSL函数使用接口
(2)了解HTTPS的工作原理
(3)配置IIS或Apache的HTTPS功能
(4)使用OpenSSL协议开发一个安全聊天程序
硬件环境:
软件环境:
Windows7
实验步骤与内容:
(1)熟悉OpenSSL库中SSL函数使用接口
使用OpenSSL.exe(Linux中可执行文件名是openssl)可以做很多工作,是一个很好的测试或调试工具。
显示版本和编译参数:
>opensslversion-a
查看支持的子命令:
>openssl?
SSL密码组合列表:
>opensslciphers
测试所有算法速度:
>opensslspeed
测试RSA速度:
>opensslspeedrsa
测试DES速度:
>opensslspeeddes
产生RSA密钥对:
>opensslgenrsa-out1.key1024
取出RSA公钥:
>opensslrsa-in1.key-pubout-out1.pubkey
RC4加密文件:
>opensslenc-e-rc4-in1.key-out1.key.enc
RC4解密文件:
>opensslenc-d-rc4-in1.key.enc-out1.key.2
计算文件的MD5值:
>opensslmd5<1.key
计算文件的SHA1值:
>opensslsha1<1.key
openssl版本
Ssl组合密码
Openssl支持的子命令
(2)了解HTTPS的工作原理
SSL协议的主要功能即把TCP的字节流变成了一个安全的流,所有基于TCP的程序可以很容易地采用SSL协议。
主要的变化在于accept/connect()变化为使用OpenSSL提供的SSL_accept/SSL_connect(),read/write()变化为SSL_read/SSL_write()。
初始化函数库
SSL_load_error_strings();
OpenSSL_add_all_algorithms();
客户端
SSLv3_client_method();
SSL_CTX_new();
SSL_CTX_set_accepted_Cas();//认可的CAs
SSL_CTX_use_certificate_file();//自己的证书
SSL_CTX_use_PrivateKey_file();//自己的私钥
SSL_CTX_check_private_key();//检查证书-私钥一致性
SSL_CTX_set_cipher();//自己喜欢的算法组合
服务器端
SSLv3_server_method();
SSL_CTX_new();
SSL_CTX_set_accepted_Cas();
SSL_CTX_use_certificate_file();
SSL_CTX_use_PrivateKey_file();
SSL_CTX_check_private_key();
SSL_CTX_set_cipher();
(3)配置Apache的HTTPS功能
1、安装好apache环境,注意要装ssl版本的。
这里装在c:
/apache目录下。
2、生成服务器证书
1)在DOS命令下进入apache/bin目录
2)在windows环境下需先设置Openssl环境变量:
执行命令
3)生成私钥文件,这是用128位rsa算法生成密钥,得到server.key文件。
4)生成证书请求文件。
执行命令
5)签署服务器证书文件。
这是用步骤3,4的的密钥和证书请求生成证书server.crt,-days参数指明证书有效期,单位为天,x509表示生成的为X.509证书。
3、配置httpd.conf
1)打开httpd.conf文件,移除:
Includeconf/extra/httpd-ssl.conf
LoadModulessl_modulemodules/mod_ssl.so
2)打开httpd-ssl.conf,修改如下:
443> SSLEngineOn SSLCertificateFile../bin/server.crt SSLCertificateKeyFile../bin/server.key #SSLCertificateChainFile../bin//ca.crt//暂未启用 #...... DocumentRoot"c: /apache/htdocs" ServerName: 443 (4)使用OpenSSL协议开发一个安全聊天程序 1、java实现DES加密socket通信 加密: publicstaticbyte[]encrypt(byte[]datasource){ try{ SecureRandomrandom=newSecureRandom(); DESKeySpecdesKey=newDESKeySpec(password.getBytes()); //创建一个密匙工厂,然后用它把DESKeySpec转换成 SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance("DES"); SecretKeysecurekey=keyFactory.generateSecret(desKey); //Cipher对象实际完成加密操作 Ciphercipher=Cipher.getInstance("DES"); //用密匙初始化Cipher对象 cipher.init(Cipher.ENCRYPT_MODE,securekey,random); //现在,获取数据并加密 //正式执行加密操作 returncipher.doFinal(datasource); }catch(Throwablee){ e.printStackTrace(); } returnnull; } 解密: publicbyte[]decrypt(byte[]src)throwsException{ //DES算法要求有一个可信任的随机数源 SecureRandomrandom=newSecureRandom(); //创建一个DESKeySpec对象 DESKeySpecdesKey=newDESKeySpec(password.getBytes()); //创建一个密匙工厂 SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance("DES"); //将DESKeySpec对象转换成SecretKey对象 SecretKeysecurekey=keyFactory.generateSecret(desKey); //Cipher对象实际完成解密操作 Ciphercipher=Cipher.getInstance("DES"); //用密匙初始化Cipher对象 cipher.init(Cipher.DECRYPT_MODE,securekey,random); //真正开始解密操作 returncipher.doFinal(src); } 2、客户端和服务器端代码的编写 之前OPENSSL已经在电脑上安装好了 程序分为两部分,客户端和服务器端,我们的目的是利用SSL/TLS的特性保证通信双方能够互相验证对方身份(真实性),并保证数据的完整性、私密性。 1.客户端程序的框架为: /*生成一个SSL结构*/ meth=SSLv23_client_method(); ctx=SSL_CTX_new(meth); ssl=SSL_new(ctx); /*下面是正常的socket过程*/ fd=socket(); connect(); /*把建立好的socket和SSL结构联系起来*/ SSL_set_fd(ssl,fd); /*SSL的握手过程*/ SSL_connect(ssl); /*接下来用SSL_write(),SSL_read()代替原有的write(),read()即可*/ SSL_write(ssl,"Helloworld",strlen("HelloWorld! ")); 2.服务端程序的框架为: /*生成一个SSL结构*/ meth=SSLv23_server_method(); ctx=SSL_CTX_new(meth); ssl=SSL_new(ctx); /*下面是正常的socket过程*/ fd=socket(); bind(); listen(); accept(); /*把建立好的socket和SSL结构联系起来*/ SSL_set_fd(ssl,fd); /*SSL的握手过程*/ SSL_connect(ssl); /*接下来用SSL_write(),SSL_read()代替原有的write(),read()即可*/ SSL_read(ssl,buf,sizeof(buf)); 对程序来说,openssl将整个握手过程用一对函数体现,即客户端的SSL_connect和服务端的SSL_accept.而后的应用层数据交换则用SSL_read和SSL_write来完成。 直接利用公钥和私钥文件进行验证的程序截图: 运行服务器端并输入密码1234: 运行客户端: 因未安装相关证书,因此显示“Clientdoesnothavecertificate.”但程序的执行流程展示出保密通信的过程。 利用证书文件的程序执行结果: 运行服务器端: 运行客户端: 结论分析与体会: 在这一阶段的学习中,我了解到OpenSSL是强大的套接字层密码库,囊括了主要的密码算法常用的密钥和证书封装功能及ssl协议。 HTTPS是基于ssl的安全http通道,其安全基础就是ssl。 现在信息安全在网络上的一个最主要的应用就是如何实现加密通信,我通过java写了一个通过DES加密的socket通信,保证通信过程中,不会把明文泄露。 通过openssl库,实现了openssl下的加密通信。 通过Apache开启HTTPS,我了解了如何获得密钥和证书,对证书在身份认证方面的作用有了直观的了解。 通过Openssl协议开发安全聊天程序,我也学习了如何调用Openssl库中的各个方法。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息 安全 试验报告
![提示](https://static.bdocx.com/images/bang_tan.gif)