Rumah hujung hadapan web html tutorial https时代来了,你却还一无所知?

https时代来了,你却还一无所知?

Jan 23, 2017 pm 03:22 PM
http https

现在打开各大知名网站,你有没有发现地址栏都已经加了个绿色的小锁?

v2-5c1a3fe22330d8f3aaf9910effaa2c92_b.png

是的,这就是https,这就是https的时代。

然而,你了解https吗?

简单来说,https就是套在SSL/TLS内的http,也就是安全的http。何为安全?一个安全的网络通信环境要解决3个问题:

1.通信内容的保密

2.通信双方身份的真实

3.通信内容的完整

而https就是为了解决这3大问题而诞生的(准确来说应该是ssl),下面分别看看这3个问题的解决方案。

通信内容的保密

通信内容的保密需要通过加密来实现。我们的互联网环境是非常透明的,通信需要经过很多中转才能到接收方手中。这个情形有点像你上课的时候给第一排的小红递纸条一样,纸条上你肯定不会直接写今夜三更操场见,而是机灵地写了老地方见。这个老地方只有你和小红知道,这样就算小明小李看到了纸条,他们也不知道老地方是图书馆还是英语角,这就是加密,而老地方就是所谓的密钥。

当然,这个例子并不是很准确。简单来说,加解密就是一个函数,而密钥则是这个函数的参数。比如我们定义一个简单的加密函数,f(x)=x+b,x就是输入的明文,而b是密钥;解密函数就是加密函数的反函数,也就是g(x)=x-b。当不知道b的时候,你就算看到了密文也猜不出真实内容,这样就实现了加密。这种加解密都用同一个密钥,叫对称加

但这里有个问题,这里的参数b是怎么协商出来的?


你和小红可以花前月下约好b值,但是在真实网络环境中你和小红根本没有直接沟通的可能,所有沟通都要靠小明小李去传纸条的话,怎么做才能躲过他们呢?这里就需要用到非对称加密算法了,这种算法有公钥和私钥一对钥匙,公钥是所有人都能获取到的钥匙,私钥则是服务器私自保存的钥匙。非对称加密算法中公钥加密的内容只能用私钥解密,私钥加密的内容则只有公钥才能解密。所以当你使用小红的公钥加密你的纸条之后,帮你传递纸条小明小李等人看到纸条也无法读取内容了,只有拥有私钥的小红才能读出你的信息。

对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。你可能比较好奇非对称加密算法的原理,但是我这里不展开讲算法,有兴趣的同学可以自行搜索。

那么问题来了,小红给你的回应也想加密怎么办?

如果小红用她的私钥加密的话,班上所有人都知道公钥,而公钥可以解私钥的加密,也意味着所有人都能解密小红的回应消息。聪明的你一定想到了解决方案:利用非对称加密算法加密出一个对称密钥给小红,小红用她的私钥读取对称密钥,然后你们就用这个对称密钥来做对称加密,然后就可以愉快地约约约了。

当然,https也是这么干的。

通信双方身份的真实

加密之后貌似通信过程就完美了?且慢,小红的公钥是怎么公告天下的呢?

要知道在网络环境中所有信息交互都是通过传纸条的方式来进行的,小红的公钥也不例外,万一在经过小明手里的时候被掉包了怎么办?怎么保证你手上的小红公钥是就是真正的小红公钥呢?看到班上的痴男怨女的纸条被各种掉包,文娱委员凤姐决定挺身而出。凤姐想出了一个办法,所有加密通信都要带上一本证,用来证明自己的身份。这本证是凤姐特意为班上所有单身狗做的,公钥就放在证书里面返回给纸条的发送者,证书里面除了公钥还有学号、人名、甚至星座身高三围等各种信息。证书上盖了一个大大的鉴定章,这是凤姐独有的章,表示证上的信息真实性由凤姐保证,看到这个章就可以认为对方是个真·单身狗。

通过这些信息你就可以知道对方是小红还是如花了,这就是证书机制。

显然你会怀疑证书上凤姐的公章是有可能被伪造的,怀疑有理!所以证书上的公章也是非对称加密过的,加密方式跟上面提到的刚好相反:用凤姐的私钥加密,用凤姐公钥就可以解密,这样就可以鉴定证书的真伪。这个公章就是证书的数字签名,具体来说就是先将证书用哈希算法提取摘要,然后对摘要进行加密的过程。另外你也可以直接拿着证书去找凤姐,凤姐就会帮你验证证书的有效性。(证书是有期限的,所以即使是真证书也会可能过期,需要注意)

这个机制看起来相当完善,但是我们要以怀疑一切的态度去做安全机制,凤姐保证的东西是可信任的了。

但是,凤姐真的是凤姐吗???

v2-7f52b54c9eddfb191f2bede1fa5e7e4e_b.png

所以,凤姐本身也要由证书来保证,凤姐的证书由班主任颁发,而班主任的证书由校长颁发……这个链一直到最权威的几个机构,这些机构在https体系中就是所谓的根CA。根是不可怀疑的权威,他们为自己带盐,自己证明自己是自己。在https证书体系里面,根证书是操作系统/浏览器自带的,我们可以相信被这些机构认证的证书的,从而一层一层推导到凤姐这个级别。

另外,由于证书其实很容易做,地铁口10块一本,无论哈佛还是斯坦福,统统10块!所以有些公司会自己做证书,根本不去找根CA机构,比如著名的12306。你也可以自己做证书放到网上让用户下载导入浏览器,但因为你没有凤姐的影响力,所以没人会相信你,当然也有人连凤姐都不相信……

v2-00f5b08c42a69b925c9aee7f86884db8_b.jpg

通信内容的完整

密也加了,凤姐的公章也盖了,是不是这套机制就perfect了呢?

NoNoNo,想一下暗恋着你的小明看到你给小红传纸条,心里肯定不爽,虽然看不懂但是还是可以改密文呀。本来你是要约小红半夜三更操场见,结果小明删掉了前半部分的密文,解密后恰好变成了“操场见”,然后小红下课马上往操场跑,而你却跑回宿舍好好洗了个澡。。。然后,然后小红就跟小明跑了~~

这种篡改通信内容的场景相信大家都深有体会,我们访问一些站点的时候无缘无故就出现了运营商的广告,这都是运营商给加的!!所以内容的完整性也需要保证,这比较简单:先用哈希算法提取内容摘要,然后对摘要进行加密生成数字签名,验证数字签名就可以判断出通信内容的完整性了。

以上就是https用到技术的简化版,一个http通信流程如下:

v2-e3f0caaef0a58dca389e01b9abfeb393_r.png


大体步骤:

1.客户端发送Client Hello报文开始SSL通信,报文中包含SSL版本、可用算法列表、密钥长度等。

2.服务器支持SSL通信时,会以Server Hello报文作为应答,报文中同样包括SSL版本以及加密算法配置,也就是协商加解密算法。

3.然后服务器会发送Certificate报文,也就是将证书发送给客户端。

4.客户端发送Client Key Exchange报文,使用3中的证书公钥加密Pre-master secret随机密码串,后续就以这个密码来做对称加密进行通信。

5.服务器使用私钥解密成功后返回一个响应提示SSL通信环境已经搭建好了。

6.然后就是常规的http c/s通信。

根据前文所述,在步骤3和步骤6都会使用摘要和签名算法来保证传递的证书和通信内容不被篡改。通过这个流程可以看出,https的核心在于加密,尤其是非对称加密算法被多次使用来传送关键信息。

理解了加密,认识到网络的透明性,抱着怀疑一切的态度,理解https这套体系就变得简单了。


结语


最近在系统地重温http相关的东西,这一篇先介绍了https的基本原理,才疏学浅,文中有不当之处,还望斧正!后续会介绍实际应用、静态服务器的配置等~


附录


https如何避免中间人劫持?

如果有人劫持了你的dns服务器,将http://wwe.icbc.com解析到他的非法网站,或者代理服务器将你导向他的非法网站去,这都是中间人攻击。如果没有https,那么攻击就这样发生了。那https怎么避免这类攻击?

答案是通过证书鉴别。

1.在申请证书的时候CA会对所要申请的域名进行控制权认证,所以你是不可能用隔壁老王的网站来申请证书的。就算你黑了他的站点,只要老王去申请证书就能发现了。

2.如果伪造一个证书,这个证不是权威CA签发的,那么浏览器检查的时候会报警提示用户证书非法。当然用户仍然可以继续操作,比如抢火车票什么的。。

3.如果你把真正站点的证书搞下来,证书上的域名不变,只是将公钥替换掉,那么浏览器比对证书数字签名的时候就能发现对不上了,二话不说,报警。

4.如果中间人直接用ICBC Home的真实证书,那么他虽然能收到客户端的消息,但是无法解密,所以也无法响应客户端的请求,攻击无效!


证书的数字签名


之前对哈希算法和数字签名了解不多,了解之后发现其实原理还是挺简单的。哈希算法可以将大量的数据转换成定长的摘要,而且摘要是与输入对应的,输入变化后摘要也会发生变化。所以对数据应用哈希算法求出摘要,比对摘要就可以判断数据是否被篡改过了。证书使用了私钥加密摘要,然后客户端就可以用公钥解密得到摘要,对比哈希算法算出来的摘要就可以判断证书是否被篡改过。另一方面,因为公私钥是成对的,篡改后的证书虽然能求出摘要,但是无法加密出签名,所以摘要和加密组合使用就可以保证证书的真实性了。这里的私钥是证书的发证机构的私钥,也就是CA链上CA加密用户服务器证书,上级CA加密下级CA的证书,从而形成一个信任环。

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah maksud kod status http 520? Apakah maksud kod status http 520? Oct 13, 2023 pm 03:11 PM

Kod status HTTP 520 bermakna pelayan mengalami ralat yang tidak diketahui semasa memproses permintaan dan tidak dapat memberikan maklumat yang lebih khusus. Digunakan untuk menunjukkan bahawa ralat tidak diketahui berlaku semasa pelayan memproses permintaan, yang mungkin disebabkan oleh masalah konfigurasi pelayan, masalah rangkaian atau sebab lain yang tidak diketahui. Ini biasanya disebabkan oleh isu konfigurasi pelayan, isu rangkaian, kelebihan beban pelayan atau ralat pengekodan. Jika anda menghadapi ralat kod status 520, sebaiknya hubungi pentadbir tapak web atau pasukan sokongan teknikal untuk mendapatkan maklumat dan bantuan lanjut.

Fahami senario aplikasi biasa pengalihan halaman web dan fahami kod status HTTP 301 Fahami senario aplikasi biasa pengalihan halaman web dan fahami kod status HTTP 301 Feb 18, 2024 pm 08:41 PM

Kuasai maksud kod status HTTP 301: Senario aplikasi biasa pengalihan halaman web Dengan perkembangan pesat Internet, keperluan orang ramai untuk interaksi halaman web menjadi lebih tinggi dan lebih tinggi. Dalam bidang reka bentuk web, pengalihan halaman web adalah teknologi biasa dan penting, dilaksanakan melalui kod status HTTP 301. Artikel ini akan meneroka maksud kod status HTTP 301 dan senario aplikasi biasa dalam pengalihan halaman web. Kod status HTTP301 merujuk kepada ubah hala kekal (PermanentRedirect). Apabila pelayan menerima pelanggan

Cara menggunakan Pengurus Proksi Nginx untuk melaksanakan lompatan automatik dari HTTP ke HTTPS Cara menggunakan Pengurus Proksi Nginx untuk melaksanakan lompatan automatik dari HTTP ke HTTPS Sep 26, 2023 am 11:19 AM

Cara menggunakan NginxProxyManager untuk melaksanakan lompatan automatik dari HTTP ke HTTPS Dengan perkembangan Internet, semakin banyak laman web mula menggunakan protokol HTTPS untuk menyulitkan penghantaran data untuk meningkatkan keselamatan data dan perlindungan privasi pengguna. Memandangkan protokol HTTPS memerlukan sokongan sijil SSL, sokongan teknikal tertentu diperlukan semasa menggunakan protokol HTTPS. Nginx ialah pelayan HTTP yang berkuasa dan biasa digunakan dan pelayan proksi terbalik, dan NginxProxy

Apakah kod status http 403? Apakah kod status http 403? Oct 07, 2023 pm 02:04 PM

Kod status HTTP 403 bermakna pelayan menolak permintaan pelanggan. Penyelesaian kepada kod status http 403 ialah: 1. Semak kelayakan pengesahan Jika pelayan memerlukan pengesahan, pastikan kelayakan yang betul disediakan 2. Semak sekatan alamat IP, pastikan bahawa alamat IP klien adalah disenarai putih atau tidak disenaraihitamkan 3. Semak tetapan kebenaran fail Jika kod status 403 berkaitan dengan tetapan kebenaran fail atau direktori, pastikan klien mempunyai kebenaran yang mencukupi untuk mengakses fail atau direktori ini. dll.

Cara menggunakan Pengurus Proksi Nginx untuk melaksanakan proksi terbalik di bawah protokol HTTPS Cara menggunakan Pengurus Proksi Nginx untuk melaksanakan proksi terbalik di bawah protokol HTTPS Sep 26, 2023 am 08:40 AM

Cara menggunakan NginxProxyManager untuk melaksanakan proksi terbalik di bawah protokol HTTPS Dalam beberapa tahun kebelakangan ini, dengan populariti Internet dan kepelbagaian senario aplikasi, kaedah capaian laman web dan aplikasi menjadi semakin kompleks. Untuk meningkatkan kecekapan dan keselamatan akses laman web, banyak tapak web telah mula menggunakan proksi terbalik untuk mengendalikan permintaan pengguna. Proksi terbalik untuk protokol HTTPS memainkan peranan penting dalam melindungi privasi pengguna dan memastikan keselamatan komunikasi. Artikel ini akan memperkenalkan cara menggunakan NginxProxy

Aplikasi Pantas: Analisis Kes Pembangunan Praktikal PHP Asynchronous HTTP Muat Turun Berbilang Fail Aplikasi Pantas: Analisis Kes Pembangunan Praktikal PHP Asynchronous HTTP Muat Turun Berbilang Fail Sep 12, 2023 pm 01:15 PM

Aplikasi Pantas: Analisis Kes Pembangunan Praktikal PHP Asynchronous HTTP Muat Turun Berbilang Fail Dengan pembangunan Internet, fungsi muat turun fail telah menjadi salah satu keperluan asas bagi banyak laman web dan aplikasi. Untuk senario di mana berbilang fail perlu dimuat turun pada masa yang sama, kaedah muat turun segerak tradisional selalunya tidak cekap dan memakan masa. Atas sebab ini, menggunakan PHP untuk memuat turun berbilang fail secara tidak segerak melalui HTTP telah menjadi penyelesaian yang semakin biasa. Artikel ini akan menganalisis secara terperinci cara menggunakan HTTP tak segerak PHP melalui kes pembangunan sebenar.

http meminta penyelesaian ralat 415 http meminta penyelesaian ralat 415 Nov 14, 2023 am 10:49 AM

Penyelesaian: 1. Semak Content-Type dalam tajuk permintaan 2. Semak format data dalam badan permintaan 3. Gunakan format pengekodan yang sesuai 5. Semak sokongan sisi pelayan;

Masalah komunikasi dan keselamatan rangkaian biasa dan penyelesaian dalam C# Masalah komunikasi dan keselamatan rangkaian biasa dan penyelesaian dalam C# Oct 09, 2023 pm 09:21 PM

Masalah dan penyelesaian komunikasi rangkaian dan keselamatan biasa dalam C# Dalam era Internet hari ini, komunikasi rangkaian telah menjadi bahagian yang sangat diperlukan dalam pembangunan perisian. Dalam C#, kami biasanya menghadapi beberapa masalah komunikasi rangkaian, seperti keselamatan penghantaran data, kestabilan sambungan rangkaian, dsb. Artikel ini akan membincangkan secara terperinci komunikasi rangkaian biasa dan isu keselamatan dalam C# dan menyediakan penyelesaian yang sepadan serta contoh kod. 1. Masalah komunikasi rangkaian Gangguan sambungan rangkaian: Semasa proses komunikasi rangkaian, sambungan rangkaian mungkin terganggu, yang boleh menyebabkan

See all articles