HTTPS与SSL入门
1、简介:
HTTPS是最常见的HTTP安全版本。它得到了很广泛的应用,所有主要的商业浏览器和服务器上都提供HTTPS。HTTPS将HTTP协议与一组强大的对称、非对称和基于证书的加密技术结合在一起,使得HTTPS不仅很安全,而且很灵活,很容易在处于无序状态的、分散的全球互联网上进行管理。
HTTPS就是在安全的传输层上发送的HTTP。HTTPS在将HTTP报文发送给TCP之前,先将其发送给一个安全层,对其进行加密。即自顶向下依次是:应用层(HTTP)-安全层(SSL或TLS)-传输层(TCP)-网络层(IP)-数据链路层(网络接口)。
现在,HTTP安全层通过SSL(安全套接字层)及其现代替代协议TLS(安全传输层协议)实现。一般用SSL指代SSL或TLS。
2、关于SSL
1)SSL与安全服务器建立连接的过程:
在HTTPS中,客户端首先打开一条到Web服务器443端口(默认)的连接。建立TCP连接后,客户端和服务器就会初始化SSL层,以二进制格式对加密参数进行沟通,并交换密钥。握手完成后,SSL初始化就完成了,客户端就可以将请求报文发送给安全层进行加密,再发送给TCP。
2)SSL握手
步骤:交换协议版本号;选择一个两端都了解的密码;对两端的身份进行认证;生成临时的会话密钥,以便加密信道。下图为简化版的SSL握手过程:
3、服务器证书
1)SSL支持双向认证:将服务器证书承载回客户端,再将客户端的证书回送给服务器。但实际上客户端证书很少使用(使用场景:如有些组织的内部网络会使用客户端证书来控制雇员对信息的访问)。
安全HTTPS事务总是要求使用服务器证书。由知名权威机构签发的服务器证书可以帮助你评估对服务器的信任度。服务器证书是一个显示了组织名称、地址、服务器DNS域名以及其他信息的X.509 v3派生证书。客户端可以检查证书,以确保所有的信息都是可信的。
2)站点证书的有效性
SSL自身不要求用户检查Web服务器证书,但大部分浏览器都会对证书进行简单的完整性检查,并为用户提供进一步彻查的手段。网景提出的一种Web服务器证书有效性算法是大部分浏览器有效性验证技术的基础。验证步骤如下:
(1)日期检测:检查证书是否过期或未激活。
(2)签名颁发者可信度检测
证书颁发机构(CA)签发证书,负责为服务器担保:证书有不同等级,每种证书都要求不同级别的背景验证,如申请电子商务服务器证书通常需要提供营业的合法证明。
任何人都可以生成证书,但有些CA是非常著名的组织,它们通过非常清晰的流程来验证证书申请人的身份及商业行为的合法性。因此,浏览器会附带一个签名颁发机构的受信列表。浏览器收到未知颁发机构签发的证书通常会显示警告信息。有些证书会携带到受信CA的有效签名路径,浏览器可能会选择接受所有此类证书。如某受信CA为“Sam的签名商店”签发了一个证书,而“Sam的签名商店”也签发了一个站点证书,浏览器可能会将其作为从有效CA路径导出的证书接受。
(3)签名检测:一旦判定签名授权是可信的,浏览器就要对签名使用签名颁发机构的公开密钥,并将其与校验码进行比较,以查看证书的完整性。
(4)站点身份检测:为防止服务器复制其他人的证书,或拦截其他人的流量,大部分浏览器都会试着去验证证书中的域名与它们所对话的服务器的域名是否匹配。
3)虚拟主机(一台服务器上有多个主机名)与证书
虚拟主机站点上的安全流量处理/证书管理会稍微棘手一些。有些流行的Web服务器程序只支持一个证书。若用户请求虚拟主机名,与证书名称不严格匹配,浏览器就会显示警告。如abc.com,站点的托管服务提供商提供的官方名称为abc.securesites.com。当用户访问http://www.abc.com时,服务器证书中列出的官方主机名(*.securesites.com)与用户浏览的虚拟主机名(www.abc.com)不匹配。为防止出现这个问题,abc.com的所有者会在开始处理安全事务时,将所有用户都重定向到abc.securesites.com。
4、OpenSSL/openssl
1)OpenSSL是一个密码工具包,它实现了SSL(v2/v3)和TLS(v1)网络协议和相关的密码学标准。openssl是OpenSSL的命令行工具。
2)以下介绍openssl的几个常用命令:
(1)genrsa:generate an RSA private key
I、简介:该命令生成一个RSA私钥。
II、常用选项:-out file:输出到file(默认为标准输出);-des|-des3|-idea:用DES/DES3/IDEA将私钥加密(要求用户输入口令)再输出;numbits:生成的私钥bit数(默认为512),必须是最后一个选项。
III、示例:openssl genrsa -des3 -out server.key 1024
(2)rsa:RSA key processing tool
I、简介:该命令用于处理RSA密钥(它们可在不同形式间转换)。注意,该命令加密私钥时,使用传统的SSLeay(一个开源SSL实现)格式,而非更安全的PKCS#8格式。
II、选项:-in file:从file(默认为标准输入)中读取密钥。若密钥已加密,则要求输入口令;-out file:把密钥输出到file(默认为标准输出)。若指定了加密选项,则也要输入口令。
III、示例:移除一个RSA私钥上的口令:openssl rsa -in key.in -out key.out。这里key.in是带口令的,如genrsa -des3生成的私钥。
(3)req:PKCS#10 certificate request and certificate generating utility.
I、简介:该命令主要用于创建和处理PKCS#10格式的证书请求。
II、选项:-out file:输出到file(默认为标准输出);-key file:从file中读取私钥;-new:生成一个新的证书请求。它会提示输入相关信息(国家、省市、组织、邮件等)。若不指定-key,则使用配置文件指定的信息生成一个新的RSA私钥。
III、示例(创建一个私钥,再用它生成一个证书请求):
openssl genrsa -out key.pem 1024 openssl req -new -key key.pem -out req.pem
(4)x509:Certificate display and signing utility
I、简介:该命令是一个多功能的证书工具。它可用于显示证书信息、转换证书形式、像CA一样对证书请求进行签署(sign)或编辑证书的信任设置。
II、选项:-days arg:证书有效期(默认30天);-req:默认输入是一个证书,使用该选项则表示输入是一个证书请求;-in file:从file(默认为标准输入)读取证书;-out file:输出到file(默认为标准输出);-signkey file:使用提供的私钥将输入文件变成自签名的。若输入是证书,则将证书颁发者设置为主体名(自签名)、改变公钥为提供的值并设置开始日期(当前时间)和结束日期(根据-days设置)。若输入是证书请求,则使用提供的私钥和请求中的主体名创建一个自签名证书。
参考资料:
《HTTP权威指南》
不断学习中。。。