什么是https
https is "Hyper Text Transfer Protocol" with Secure Sockets Layer (SSL)
HTTPS的主要思想是在不安全的网络上创建一安全信道,并可在使用适当的加密包和服务器证书可被验证且可被信任时,对窃听和中间人攻击提供合理的保护。 HTTPS的信任继承基于预先安装在浏览器中的证书颁发机构(如VeriSign、Microsoft等)(意即“我信任证书颁发机构告诉我应该信任的”)。因此,一个到某网站的HTTPS连接可被信任,当且仅当:
- 用户相信他们的浏览器正确实现了HTTPS且安装了正确的证书颁发机构;
- 用户相信证书颁发机构仅信任合法的网站;
- 被访问的网站提供了一个有效的证书,意即,它是由一个被信任的证书颁发机构签发的(大部分浏览器会对无效的证书发出警告,当然自己去生成是不可以的)
- 该证书正确地验证了被访问的网站(如,访问https://example时收到了给“Example Inc.”而不是其它组织的证书);
- 或者互联网上相关的节点是值得信任的,或者用户相信本协议的加密层(TLS或SSL)不能被窃听者破坏。
和ssl什么关系
从定义可以看出
为什么用https
HTTP协议和安全协议同属于应用层(OSI模型的最高层),具体来讲,安全协议工作在HTTP之下,运输层之上:安全协议向运行HTTP的进程提供一个类似于TCP的套接字,供进程向其中注入报文,安全协议将报文加密并注入运输层套接字;或是从运输层获取加密报文,解密后交给对应的进程。严格地讲,HTTPS并不是一个单独的协议,而是对工作在一加密连接(TLS或SSL)上的常规HTTP协议的称呼。 HTTPS报文中的任何东西都被加密,包括所有报头和荷载。除了可能的选择密文攻击(参见限制小节)之外,一个攻击者所能知道的只有在两者之间有一连接这一事实。
它加密了所有报头和荷载,相对来说安全
怎么样https
要使一网络服务器准备好接受HTTPS连接,管理员必须创建一数字证书,并交由证书颁发机构签名以使浏览器接受。证书颁发机构会验证数字证书持有人和其声明的为同一人。浏览器通常都预装了证书颁发机构的证书,所以他们可以验证该签名。
对于怎么与证书颁发机构合作,果壳是这么说的:
1.浏览器将自己支持的一套加密规则发送给网站。 2.网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。 3.获得网站证书之后浏览器要做以下工作: a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。 b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。 c) 使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。 4.网站接收浏览器发来的数据之后要做以下的操作: a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。 b) 使用密码加密一段握手消息,发送给浏览器。 5.浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,
其实跟数字签名一个道理,老板有私钥,员工有公钥就可以验证这个签名是不是老板签的,只要员工肯定这个公钥是一个可信机构给的(CA),如果是路边给的当然就不相信了,如果是公司给的那也就是自己相信自己了。
12306的https
在新版订票页面中,中国铁路客户服务中心使用了HTTPS以加密数据,但是中国铁路客户服务中心并未采用得到广泛认可的数字证书认证机构的证书,而是采用了由其自己签名的证书,证书机构的名称为“Sinorail Certification Authority”(SRCA)颁发的证书。 当浏览器检测到其根证书库当中没有“SRCA”这个证书时,就出于安全性的因素阻止用户访问网站。为此,12306网站要求用户手动安装根证书以便浏览器放行。[22]此方法并非对所有浏览器有效,在使用某些浏览器时用户需要单独进行设置。 另外,每个SSL数字证书都有一个密钥。一般密钥一旦失窃,正规认证机构及系统厂商就会宣布此证书无效,[23]对于较小的认证机构,一般为证书设立一个证书吊销列表(CRL)[24],当密钥失窃时,证书会自动被列为失效。SRCA的证书没有CRL,系统厂商也不会专门为此发布一个更新。[25]因此黑客可能会利用这个密钥以SRCA的身份发放证书。一旦黑客把这个证书颁发给了一些恶意网站,安装了SRCA证书的浏览器将放行这些网站,无法抵御由此引发的恶意攻击。为此有人在网络上提出用户在购票之后立刻将SRCA的证书设置为不受信任或者只是单独将购票页面加入浏览器信任列表的建议。 当用户开始进行支付的时候(访问pay.12306.cn的时候),中国铁路客户服务中心就会向用户出示一份Verisign签发的有效证书,但是只能保证用户在支付时的安全,不能保证黑客利用SRCA密钥再次签发假证书制造恶意攻击。
作为开发者怎么去用https
以汤姆猫为例
- 自己生成数字证书
- 导入由证书颁发机构生成的证书(这个要把私钥传给证书颁发机构?)