信息安全课程设计第二周任务(OpenSSL配置单向认证(自制证书+https的实现))
信息安全课程设计第二、三周任务
20181301刘天宁
OpenSSL配置单向认证(自制证书+https的实现)
一、课前学习
在开始本周的任务前,我自己对https和http进行了学习,以下是我对他们知识点的总结。
1.https简介
HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。
HTTPS 在HTTP 的基础上加入SSL 层,以SSL加密技术为安全基础。 HTTPS 与HTTP的默认端口不同,并存在一个加密/身份验证层(在 HTTP与 TCP 之间,即应用层与传输层之间)。
SSL协议可分为两层:
- SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
- SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
搭建https的流程主要与SSL握手协议有关。
2.https好在哪里
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是后来设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。
简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全。
HTTPS和HTTP的区别主要如下:
1、https协议需要到CA(Certificate Authority 即颁发数字证书的机构)申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。
3.https建立流程
以下介绍https的实际流程:
- CA将自己的证书(公信凭证)交给各浏览器厂商,厂商将证书配置到各自浏览器。
- 网站将自己的证书(身份凭证)交给CA,让CA使用私钥对证书进行签名,CA签名后发回给网站。在这个过程中,CA需要核实网站的真实性,网站发给CA签名的也不仅只是证书,其中网站证书(含网站URL)和网站公钥是必要的,还会包含一些其他信息一同签名。
- 浏览器用户向网站请求安全连接,网站把CA签名后的证书发给用户,浏览器会根据证书信息,检查是哪个CA做的签名,从浏览器自带的CA证书中找到对应公钥验证。
- 如果验证通过,就证明了网站身份的可靠性,用户可以通过网站提供的公钥进行安全连接,和网站协商后续对称加密的密钥。
4.证书格式说明
- 带有私钥的证书 PKCS12(P12):包含了公钥和私钥的二进制格式的证书形式,以 pfx 作为证书文件后缀名。
- 二进制编码的证书(DER):证书中没有私钥,DER 编码二进制格式的证书文件,以 .cer 作为证书文件后缀名。
- Base64 编码的证书(PEM):证书中没有私钥,Base64 编码格式的证书文件,也是以 .cer 作为证书文件后缀名。
二、准备工作
- 环境:windows10
- 软件:openssl、tomcat
- 准备工作:tomcat环境配置(具体可见上篇博客)(包括jdk);下载openssl工具到本地,解压后,在bin目录下新建两个文件夹,分别为ca、server。
具体流程图:
三、证书制作
生成CA证书
- 创建私钥
genrsa -out ca/ca-key.pem 1024
- 创建证书请求
req -new -out ca/ca-req.csr -key ca/ca-key.pem
- 自签署证书
x509 -req -in ca/ca-req.csr -out ca/ca-cert.pem -signkey ca/ca-key.pem -days 3650
生成server证书
- 创建私钥
genrsa -out server/server-key.pem 1024
- 创建证书请求
req -new -out server/server-req.csr -key server/server-key.pem
- 自签署证书
x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey server/server-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAcreateserial -days 3650
- 转换证书格式
pkcs12 -export -clcerts -in server/server-cert.pem -inkey server/server-key.pem -out server/server.p12
四、配置tomcat
1.打开tomcat中conf/server文件
2.修改server文件(黄色部分为增添的Connector)
3.把自制网站拷贝到tomcat/webapps/ROOT下
-
五、在IE浏览器导入证书
第一步:在Internet选项中点击内容找到证书,再在证书中找到受信任的根证书颁发机构,点击导入
第二步:将CA证书导入:
查看证书情况
六、https的实现
1.打开tomcat的bin的startup
-
2.输入https://localhost:8443/发现https顺利实现(加上锁头)
同理火狐浏览器也顺利实现:
openssl实现单向认证(自制证书)成功!
七、自己遇到的问题以及解决方案
1.在配置CA证书时遇到的问题
1)直接输入openssl命令无法使用
解决办法:运用命令行cd进入Openssl目录下的bin文件,再接着使用openssl命令创建证书
2)在创建CA证书请求时有以下问题:显示RSA码过长
解决:输入q,退出重来即可
3.在tomcat配置时遇到的问题以及解决思路
1)主要问题就是tomcat的server.xml配置的问题:
一开始我并不清楚如何修改配置,试了多种方法都没有实现https,网上的方法大多不适合我们的证书,最后通过阅读书籍让自己对ssl有了更加全面的认识,在询问同学和查找大量资料后成功修改了server.xml文件。最后顺利完成了网站https的实现。
2)我使用的是tomcat配置网站,一开始不清楚如何将http://localhost:8080/里面的tomcat网站换成我们自己的网站。
解决办法:通过不断调试,把网站放到各个文件夹中尝试,最终确定把自制网站拷贝到tomcat/webapps/ROOT下
4.导入证书时遇到的问题
一开始自己并不知道证书到底是在导入受信任的根证书机构还是个人里面。
解决:通过网上查询相关资料以及自己不断调试知道了把CA证书导入受信任的根证书机构即可解决问题。
八、个人体会
通过完成本次任务,我获益匪浅。虽然自己在之前的课程中学习过http和https,但是只知道其基本原理,而本次课设让我对这两个概念有了更加全面、深入的理解,自己也真正在“做中学”中实践了http到https转变的过程。自己在上学期的课程中学习了证书,但是仅仅只是知道了一些皮毛,而通过本次课设,我完全掌握了如何编写证书、导入证书,以及证书的各种属性。之前我的问题就是无法把一些学到的理论知识转化为“实物”,参与本次课设增强了我的“动手能力”,让我自己在实践中成长。