https网站的那点事儿

1、HTTP简介

http是应用层的一种协议,它是在TCP/IP基础上的。就是说,客户端与服务器端首先要建立TCP连接,然后再是http的请求与相应。而TCP的创建连接是通过客户端与服务器端的三次握手实现的,关闭是通过四次握手实现。如果每次http请求后,TCP连接立刻关闭,http再请求时,再重新创建连接,就造成服务器压力比较大、客户端等待时间长的问题。因此最好是第一次http请求创建的TCP连接,能够保存一段时间,这样,下次再有http请求时,就不用创建TCP连接了。提高了响应速度。

1.1 http的request

下面的图就是http的请求报文的格式。
在这里插入图片描述
其中请求头部,就是各种键值对。在其中就有这一项:Connection: Keep-Alive。这个就是上面讲到的要保持TCP的连接。目前http协议版本中keep-alive默认是开启的。TCP是全双工的,因此要客户端和服务器都可以发起关闭请求,然后通过四次握手完成关闭。

1.1.1 keep-alive要保持多久?

这个取决客户端和服务器端的。目前Firefox浏览器是115秒,IIS服务器是120秒。也就说,Firefox等待最后一次服务器返回的响应后,会保持115秒,时间到了后,就会主动发起关闭请求。而IIS服务器是收到客户端最后一次请求后,保持TCP连接120秒,若这段时间,没有请求,则120后,IIS将会关闭TCP连接。若客户端是Firefox,服务器是IIS,那还不等IIS关闭TCP连接时,Firefox就发起关闭请求了,然后Firefox和IIS之间的TCP连接就关闭了。
下面是Firefox和IIS的设置界面
火狐的设置界面
IIS的设置界面

1.2 http的响应

http的响应

1.3 http教程

这个教程详细说明了http的相关内容:HTTP教程
这篇文章详细说明了keep-alive与消息报头:消息报告与keep-alive
这篇文章深入浅出的介绍了http的内容:HTTP详解
这篇文章详细的介绍了keep-alive知识,并有大量的截图,推荐。keep-alive

1.4 http的问题

http是通过明文传递数据,因此通过网络抓包,可以获取你的所有信息。这是非常不安全的,那如何保证传输数据的安全呢?

2、HTTPS简介

为了解决安全问题,就出现网络安全协议。就是SSL/TLS。说个题外话,SSL和TLS是同一个东西。网景公司在90年代设计了SSL(secure sockets layer)协议,后来这协议在1999年时成为了标准,名称也进行了修改,改为TLS(transport layer security)。
网络安全协议是http与TCP之间,如图所示
http与https

2.1 如何实现?

有了安全协议,并不是说就网络就安全了,万事大吉了。我们要将协议具体的实现啊!而具体的实现就是证书。若你想创建一个https的网站,你必须准备一个证书,并把证书部署到网站上,这样才是真正的实现。

2.1.1 基础知识

  1. 网站证书分为公钥和私钥。可以把公钥认为是一个带着锁的铁盒子(锁是开着的哈,得能往里面放东西),而私钥是能打开锁的钥匙。
  2. 密钥:一般就是一个字符串或数字,在加密或者解密时传递给加密/解密算法。
  3. 对称加密算法:加密和解密都是使用的同一个密钥。因此对称加密算法要保证安全性的话,密钥要做好保密,只能让使用的人知道,不能对外公开。
  4. 非对称加密算法:加密使用的密钥和解密使用的密钥是不同的。 公钥密码体制就是一种非对称加密算法。

2.1.2 https网站的访问流程

https网站的访问流程,如下图所示
https的访问流程详细说明各个操作

  1. 客户端发起HTTPS请求
    这个没什么好说的,就是用户在浏览器里输入一个https网址,然后连接到server的443端口。
  2. 服务端的配置
    采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有1年的免费服务)。这套证书其实就是一对公钥和私钥。公钥可认为是一个带锁的铁盒子,私钥是能打开的钥匙。
  3. 传送证书
    服务器把铁盒子(公钥)返回给客户端。[还包含了其他很多信息,如证书的颁发机构,过期时间等等]
  4. 客户端验证证书
    客户端对铁盒子进行验证。这部分验证就是浏览器按照SSL协议实现的,它验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值。然后用证书对该随机值进行加密。就好像上面说的,把随机值放到铁盒子里锁起来
  5. 传送加密信息
    客户端把上锁的铁盒子发给服务器。
  6. 服务端解密信息
    服务端收到铁盒子后,因为只有服务器端有钥匙,所以服务端能够打开铁盒子,获得客户端的随机值。到这一步,客户端和服务端就都有这个随机值了。然后服务端将内容通过该随机值进行对称加密。所谓对称加密就是,将内容和秘钥通过算法混合在一起,这样除非知道秘钥,不然无法获取内容,而正好客户端和服务端都知道这个秘钥(随机值),所以只要加密算法够彪悍,秘钥够复杂,数据就够安全。
  7. 传输加密后的信息
    这部分信息是服务端用随机值(秘钥)加密后的信息,,并发送给客户端
  8. 客户端解密信息
    因为客户端也有这个秘钥(随机值),因此客户端能够对加密的内容进行解密,然后完成相关内容展示或后续操作。整个过程第三方即使监听到了数据,也束手无策

2.1.3 https网站总结

通过上面的过程,就会发现。网站的证书,只是一个牵头的作用。目的是使用客户端产生的秘钥(随机数)对内容进行加密,并在客户端和服务端使用。

2.1.4 https的资料

上面https的大部分内容是来自:图解https通信过程网络编程和网络框架

2.2 证书制作及应用

上面说了证书很重要,那如何制作一个证书呢?下面演示如何通过openssl制作一个证书

提前说明:我要创建一个网站,打算网站的域名为:myhttpssitedemo.com。因此进行如下的操作

1、下载OpenSSL,并完成安装
2、将下面内容,保存为openssl.cnf,并放在OpenSSL安装路径的OpenSSL-Win64文件夹内(OpenSSL-Win32还是OpenSSL-Win64取决于你安装的版本,我的电脑是64位的,所以是OpenSSL-Win64

[ req ]
default_bits        = 2048
default_keyfile     = server-key.pem
distinguished_name  = subject
req_extensions      = req_ext
x509_extensions     = x509_ext
string_mask         = utf8only

# The Subject DN can be formed using X501 or RFC 4514 (see RFC 4519 for a description).
#   Its sort of a mashup. For example, RFC 4514 does not provide emailAddress.
[ subject ]
countryName         = CN
countryName_default     = US

stateOrProvinceName     = BJ
stateOrProvinceName_default = NY

localityName            = Bei Jing
localityName_default        = New York

organizationName         = The Test Company
organizationName_default    = Example, LLC

# Use a friendly name here because its presented to the user. The server's DNS
#   names are placed in Subject Alternate Names. Plus, DNS names here is deprecated
#   by both IETF and CA/Browser Forums. If you place a DNS name here, then you 
#   must include the DNS name in the SAN too (otherwise, Chrome and others that
#   strictly follow the CA/Browser Baseline Requirements will fail).
commonName          = Zheng Lin
commonName_default      = Example Company

emailAddress            = yourownemail@126.com
emailAddress_default        = test@test.com

# Section x509_ext is used when generating a self-signed certificate. I.e., openssl req -x509 ...
[ x509_ext ]

subjectKeyIdentifier        = hash
authorityKeyIdentifier  = keyid,issuer

# You only need digitalSignature below. *If* you don't allow
#   RSA Key transport (i.e., you use ephemeral cipher suites), then
#   omit keyEncipherment because that's key transport.
basicConstraints        = CA:FALSE
keyUsage            = digitalSignature, keyEncipherment
subjectAltName          = @alternate_names
nsComment           = "OpenSSL Generated Certificate"

# RFC 5280, Section 4.2.1.12 makes EKU optional
#   CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused
#   In either case, you probably only need serverAuth.
# extendedKeyUsage  = serverAuth, clientAuth

# Section req_ext is used when generating a certificate signing request. I.e., openssl req ...
[ req_ext ]

subjectKeyIdentifier        = hash

basicConstraints        = CA:FALSE
keyUsage            = digitalSignature, keyEncipherment
subjectAltName          = @alternate_names
nsComment           = "OpenSSL Generated Certificate"

# RFC 5280, Section 4.2.1.12 makes EKU optional
#   CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused
#   In either case, you probably only need serverAuth.
# extendedKeyUsage  = serverAuth, clientAuth

[ alternate_names ]

DNS.1       = myhttpssitedemo.com
DNS.2       = www.myhttpssitedemo.com
DNS.3       = mail.myhttpssitedemo.com
DNS.4       = ftp.myhttpssitedemo.com

# Add these if you need them. But usually you don't want them or
#   need them in production. You may need them for development.
# DNS.5       = localhost
# DNS.6       = localhost.localdomain
# DNS.7       = 127.0.0.1

# IPv6 localhost
# DNS.8     = ::1

有几个地方需要根据你自己的情况进行修改。
修改点1修改点23、打开cmd,找到OpenSSL的bin路径。
本人的路径为:cd C:\Program Files\OpenSSL-Win64\bin
4、设置配置文件路径。set OPENSSL_CONF=C:\Program Files\OpenSSL-Win64\openssl.cnf
5、生成并导出证书。openssl req -x509 -newkey rsa:4096 -sha256 -nodes -keyout myhttpssitedemo.key -out myhttpssitedemo.crt -subj "/CN=myhttpssitedemo.com" -days 3650
【注意】若cmd无法识别OpenSSL的命令,则需要进行配置环境变量。将C:\Program Files\OpenSSL-Win64\bin添加path信息中
执行命令
这样,就能够在C:\Program Files\OpenSSL-Win64\bin路径下,找到myhttpssitedemo.crtmyhttpssitedemo.key两个文件。如图所示
两个文件6、将证书导入到证书中心:
6.1 win+R快捷键后,输入certlm.msc,打开证书中心。选择“受信任的根证书颁发机构”->“证书”,右键,进行证书导入。如图所示
在这里插入图片描述按照操作,把证书导入
在这里插入图片描述在这里插入图片描述至此,可以看到证书了
在这里插入图片描述
7、将证书导出。将证书导出为证书链文件(p7b格式文件)
选中刚刚导入的证书,右键,所有任务,导出。将文件导出为p7b文件,并存储在C:\Program Files\OpenSSL-Win64\bin目录下
然后删除在证书中心中的证书(就是第6步导入的那个)
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在bin文件夹下就出现了p7b文件
导出8、执行以下命令

8.1 openssl pkcs7 -in myhttpssitedemo.p7b -inform DER -out result.pem -print_certs
8.2 openssl pkcs12 -export -inkey myhttpssitedemo.key -in result.pem -name myhttpssitedemo.com -out final_result.pfx
在cmd中输入密码,然后就会在bin文件夹中,产生最终的证书文件
执行的命令及截图如下:
在这里插入图片描述在这里插入图片描述
9、将final_result.pfx进行安装
双击final_result.pfx进行安装
选择本地计算机
输入密码
选择“标识此秘钥为可导出的秘钥…”、“包括所有扩展属性”
将证书放在收信任的根证书颁发机构
在这里插入图片描述在这里插入图片描述10、重复第9步,只不过,证书存储的位置为:Web宿主。这样IIS能够绑定了
11、在host文件中配置IP与域名的解析
12、在IIS中创建https的网站。输入主机名、选择证书
在这里插入图片描述13、通过浏览器访问
在这里插入图片描述在这里插入图片描述
成功浏览!

2.3 存在的问题

网站的证书很重要,但有一个问题,客户端如何知道服务端发过来的公钥(带锁的铁盒子)是真的呢?万一一个黑客黑了某个网站,然后把证书换成自己的,但客户端不知道啊,客户端还认为https网站是安全的。所以一般情况,证书是通过专业机构进行购买的。

这篇不错,就是背景是黑色,字体颜色、排版也不合适,不过内容还可以,可以细读。 证书、公钥、私钥的详细说明

3、其他知识

3.1 域名(一级域名、二级域名、二级目录)

在配置文件中有个

DNS.1       = myhttpssitedemo.com
DNS.2       = www.myhttpssitedemo.com
DNS.3       = mail.myhttpssitedemo.com
DNS.4       = ftp.myhttpssitedemo.com

这涉及到一个知识点。一级域名、二级域名、二级目录等名词
myhttpssitedemo.com 是一级域名
mail.myhttpssitedemo.com 是二级域名
myhttpssitedemo.com\xxx 这个是二级目录

3.2 7层网络结构

https涉及到TCP、IP,而这又涉及到7层网络架构。这个就不详细说了,贴个图
在这里插入图片描述网上很多7层架构说明,只是举例说明:这篇不错

3.2 8 网站的路径

网站中的路径返回

					var websitpath= HttpRuntime.AppDomainAppPath.ToString();
            var server_path= Server.MapPath("");
            var requset_path= Request.ApplicationPath;

其返回将会是:

websitpath: D:\TsinghuaHIS\B0401_DrugInfo\Source\Tsinghua.His.Presentation.DrugInfo.Web\
server_path:D:\TsinghuaHIS\B0401_DrugInfo\Source\Tsinghua.His.Presentation.DrugInfo.Web\DrugDetails\GoodsInfo
requset_path:/DrugInfo
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值