【补充】HTTP和HTTPS的区别和NGINX配置SSL证书

【一】HTTP和HTTPS的区别

  • HTTP协议的英文全称是Hyper Text Transfer Protocol,它是一种用于传输超文本的应用层协议。

    • HTTP在Web浏览器和Web服务器之间进行通信时使用,它通过客户端发送请求来获取Web资源,并通过服务器响应返回请求的结果。
  • HTTPS协议的英文全称是Hyper Text Transfer Protocol over Secure Socket Layer,它是一种在HTTP和TCP之间加入了加密/身份验证层的安全传输协议。

    • HTTPS使用SSL或TLS协议对通信数据进行加密,确保数据在传输过程中的机密性和完整性。
  • HTTPS和HTTP有不同的默认端口

    • HTTP的默认端口是80
    • HTTPS的默认端口是443。
  • 当我们在浏览器中访问一个网站时

    • 如果URL以"http://"开头,默认使用HTTP协议访问;
    • URL以"https://"开头,则默认使用HTTPS协议访问,这样可以确保进行安全的通信。
  • HTTPS在 HTTP与 TCP 之间加入了一个加密/身份验证层,提供了身份验证与加密通讯

  • HTTP+ SSL / TLS,也就是在 http上又加了一层处理加密信息的模块,比 http安全,可防止数据在传输过程中被窃取、改变,确保数据的完整性

  • SSL(Secure Socket Layer,安全套接字层):

    • SSL(Secure Socket Layer)是一种安全套接字层协议,最初由Netscape在1994年开发。
    • SSL协议位于TCP/IP协议和各种应用层协议之间,为数据通信提供安全支持。
    • 然而,由于SSL存在一些安全漏洞,后来的版本进行了改进,并更名为TLS。
  • TLS(Transport Layer Security,传输层安全):

    • TLS(Transport Layer Security)是SSL的后续版本,它是一种传输层安全协议。
    • 它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发
    • 1999年从 3.1 开始被 IETF 标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本。
    • SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2

【1】HTTP不安全

  • HTTP 由于是明文传输,主要存在三大风险:窃听风险、篡改风险、冒充风险

(1)窃听风险

  • 中间人可以获取到通信内容,由于内容是明文,所以获取明文后有安全风险

(2)篡改风险

  • 中间人可以篡改报文内容后再发送给对方,风险极大。

(3)冒充风险

  • 比如你以为是在和某宝通信,但实际上是在和一个钓鱼网站通信。

  • HTTPS 是为了解决这三大风险而存在的,接下来我们看看 HTTPS 到底解决了什么问题

【2】HTTP向HTTPS的演变

(1)HTTP 向 HTTPS 演化的过程

第一步:对称加密

  • 为了防止上述现象的发生,人们想到一个办法:对传输的信息加密(即使黑客截获,也无法破解)

  • 如上图所示,此种方式属于对称加密,双方拥有相同的密钥,信息得到安全传输
  • 但此种方式的缺点是:
    • (1)不同的客户端、服务器数量庞大,所以双方都需要维护大量的密钥,维护成本很高
    • (2)因每个客户端、服务器的安全级别不同,密钥极易泄露

第二步:非对称加密

  • 既然使用对称加密时,密钥维护这么繁琐,那我们就用非对称加密试试

  • 如上图所示,客户端用公钥对请求内容加密,服务器使用私钥对内容解密,反之亦然
  • 但上述过程也存在缺点:
    • (1)公钥是公开的(也就是黑客也会有公钥),所以第 ④ 步私钥加密的信息,如果被黑客截获,其可以使用公钥进行解密,获取其中的内容

第三步:将对称加密,非对称加密两者结合

  • 非对称加密既然也有缺陷,那我们就将对称加密,非对称加密两者结合起来,取其精华、去其糟粕,发挥两者的各自的优势

  • 如上图所示

    • (1)第 ③ 步时,客户端说:(咱们后续回话采用对称加密吧,这是对称加密的算法和对称密钥)这段话用公钥进行加密,然后传给服务器

    • (2)服务器收到信息后,用私钥解密,提取出对称加密算法和对称密钥后,服务器说:(好的)对称密钥加密

    • (3)后续两者之间信息的传输就可以使用对称加密的方式了

  • 遇到的问题:

    • (1)客户端如何获得公钥

    • (2)如何确认服务器是真实的而不是黑客

第四步:获取公钥与确认服务器身份

  • 获取公钥与确认服务器身份

1、获取公钥
  • (1)提供一个下载公钥的地址,回话前让客户端去下载。(缺点:下载地址有可能是假的;客户端每次在回话前都先去下载公钥也很麻烦)
  • (2)回话开始时,服务器把公钥发给客户端(缺点:黑客冒充服务器,发送给客户端假的公钥)
2、SSL 证书
  • 那有木有一种方式既可以安全的获取公钥,又能防止黑客冒充呢? 那就需要用到终极武器了:SSL 证书(申购

  • 如上图所示,在第 ② 步时服务器发送了一个SSL证书给客户端,SSL 证书中包含的具体内容有:
    • (1)证书的发布机构CA
    • (2)证书的有效期
    • (3)公钥
    • (4)证书所有者
    • (5)签名
3、证书校验
  • 客户端在接受到服务端发来的SSL证书时,会对证书的真伪进行校验,以浏览器为例说明如下:

    • (1)首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验

    • (2)浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发

    • (3)如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。

    • (4)如果找到,那么浏览器就会从操作系统中取出 颁发者CA 的公钥,然后对服务器发来的证书里面的签名进行解密

    • (5)浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做对比

    • (6)对比结果一致,则证明服务器发来的证书合法,没有被冒充

    • (7)此时浏览器就可以读取证书中的公钥,用于后续加密了

4、HTTPS加密形成
  • 所以通过发送SSL证书的形式,既解决了公钥获取问题,又解决了黑客冒充问题,一箭双雕,HTTPS加密过程也就此形成,所以相比HTTP,HTTPS 传输更加安全

    • (1) 所有信息都是加密传播,黑客无法窃听。

    • (2) 具有校验机制,一旦被篡改,通信双方会立刻发现。

    • (3) 配备身份证书,防止身份被冒充

【二】HTTPS认证流程

【1】客户端发起HTTPS请求:

  • 当客户端(通常是浏览器)想要与服务器建立安全连接时,它会向服务器发送一个 HTTPS 请求。
  • 该请求以 https:// 开头,并在默认情况下使用 443 端口。

【2】服务器发送证书:

  • 服务器在接收到客户端的 HTTPS 请求后,会将自己的数字证书发送给客户端。
  • 数字证书包含了服务器的公钥以及其他相关信息,由受信任的第三方机构(CA,Certificate Authority)签名。

【3】客户端验证证书:

  • 客户端在收到服务器发送的证书后,会对证书进行验证。
  • 首先,客户端会检查证书的签名是否合法,以确保证书来自受信任的 CA。
  • 其次,客户端会检查证书中的域名信息是否与实际访问的域名匹配。

【4】生成共享密钥:

  • 如果证书验证通过,客户端会生成一个随机数作为共享密钥(用于对称加密)。
  • 然后,客户端使用服务器的公钥对该共享密钥进行加密,并将加密后的共享密钥发送给服务器。

【5】建立安全连接:

  • 服务器在接收到客户端发送的加密共享密钥后,会使用自己的私钥进行解密。
  • 这样,服务器和客户端都获得了相同的共享密钥。
  • 之后,服务器和客户端使用共享密钥来进行后续的通信加密和解密。

【6】安全通信:

  • 在建立了安全连接后,服务器和客户端之间的通信就能够通过 HTTPS 协议进行加密传输,从而保证了数据的机密性和完整性。

【7】总结

  • 客户端发起请求
  • 服务器发送证书
  • 客户端验证证书
  • 生成共享密钥和建立安全连接

【三】ssl证书分类

  • SSL证书依据功能和品牌不同分类有所不同,但SSL证书作为国际通用的产品,最为重要的便是产品兼容性(即证书根预埋技术),因为他解决了网民登录网站的信任问题,网民可以通过SSL证书轻松识别网站的真实身份。

  • SSL证书分为如下种类:

    • 域名型SSL证书(DV SSL)

    • 企业型SSL证书(OV SSL)

    • 增强型SSL证书(EV SSL)

【1】域名型SSL证书(DV SSL)

  • 只验证网站域名所有权的简易型SSL证书,此类证书仅能起到网站机密信息加密的作用,无法向用户证明网站的真实身份。
  • 适用于个人网站、小型组织或企业网站、各类加密应用(如数据库和即时通讯协议等)。
  • 域名型SSL证书是最常见和基础的SSL证书类型。
  • 它仅对域名进行验证,确认网站的所有者具有该域名的控制权,以确保传输数据的安全性。
  • 这种类型的证书通常是自动化颁发的,验证过程也相对简单和快速,通常只需要通过电子邮件或DNS记录的方式进行验证。
  • 域名型SSL证书适用于个人网站、博客、小型企业等场景,可以帮助确保网站安全,并提供基本的SSL加密保护。

【2】企业型 SSL 证书(OV SSL)

  • 需要验证网站所有单位的真实身份的标准型SSL证书,需要购买者提交组织机构资料和单位授权信等在官方注册的凭证,不仅能起到网站机密信息加密的作用,而且能向用户证明网站的真实身份。
  • 所以,推荐在所有电子商务网站使用,因为电子商务需要的是在线信任和在线安全。
  • 企业型SSL证书是对网站及其所有者进行更严格验证的证书类型。
  • 除了验证域名的所有权外,还对公司或组织进行验证,以确保网站的真实性和合法性。
  • 在颁发企业型SSL证书之前,证书签发机构(CA)会进行更详细的身份验证,通常需要提交相关的企业文件和法律文件。
  • 企业型SSL证书适用于企业、电子商务网站、金融机构和关键业务应用等场景,能够提供更高级别的信任和保护。

【3】增强型 SSL 证书(EV SSL)

  • 同样是基于SSL/TLS安全协议,都是用于网站的身份验证和信息在网上的传输加密
  • 但验证流程更加具体详细,验证步骤更多,证书所绑定的网站就更加的可靠,可信,它跟普通SSL证书的区别也是明显的,证书上面会显示更多的信息,不仅仅是网站所属单位信息,还有公司地址等等;
  • 部署证书后,用户打开网站时,浏览器地址栏会显示绿色,在地址栏还会显示网站所属单位的名称,特别适合金融、保险、p2p、电商、网上支付等等行业
  • 增强型SSL证书是目前可信度最高的SSL证书类型之一。
  • 除了对域名和企业进行验证外,增强型SSL证书还要求对网站的真实身份进行更严格的验证,以提供更高级别的安全保护。
  • 当使用增强型SSL证书时,浏览器地址栏会显示绿色的公司名称或组织名称以及锁图标,向用户传递网站的可信度和安全性。
  • 获得增强型SSL证书需要通过严格的验证程序,并且通常需要更多的时间和成本。
  • 增强型SSL证书适用于金融机构、电子商务网站等需要用户最高级别信任的场景。

【四】申请免费证书

  • 各大平台都会提供免费ssl证书,一般一年,过期后收费,如阿里云,七牛云,腾讯云等
  • 免费90天,到期可以继续免费申请的:https://www.sslforfree.com/(要注册,要FQ)

【1】sslforfree/zerossl

(1)购买域名

(2)选择新证书

(3)选择配置

  • 选择

  • 选择

  • 选择

  • 选择

(4)选择认证方式

(5)配置解析

  • 添加记录

  • 验证解析

(6)下载证书

  • 下载下来会有三个文件:
    • certificate.crt
    • ca_bundle.crt
    • private.key
  • 合并 certificate.crtca_bundle.crt
    • cat certificate.crt ca_bundle.crt >> certificate.crt

(7)Nginx配置

server {
    listen               443 ssl;
    ssl                  on;  # 新版本这个去掉,不支持了
    ssl_certificate      /etc/ssl/certificate.crt;   # 证书地址
    ssl_certificate_key  /etc/ssl/private.key;       # 秘钥地址
    
    server_name  your.domain.com;
    access_log   /var/log/nginx/nginx.vhost.access.log;
    error_log    /var/log/nginx/nginx.vhost.error.log;
    location     / {
    root         /home/www/public_html/your.domain.com/public/;
    index        index.html;
    }
}
server {
    listen 80;
    server_name liuqingzheng.top; 
    return 301 https://$host$request_uri;  # 让原来80的访问,重定向到https
}

【2】阿里云申请

【3】七牛云申请

【五】Nginx配置ssl证书

【1】将证书文件上传到指定目录

  • certificate.crtca_bundle.crtprivate.key这三个文件上传到/etc/nginx/ssl目录下。

【2】合并证书文件

  • 执行以下命令将certificate.crtca_bundle.crt两个文件合并为一个文件certificate.crt

    cat certificate.crt ca_bundle.crt >> certificate.crt
    

    这个操作的目的是将多个证书合并成一个,在后续的配置中使用该合并后的证书文件。

【3】在/etc/nginx/conf.d目录下新建配置文件

  • 文件名:blog.conf
    • blog.conf文件中,配置了一个HTTP服务器,监听端口80,并设置*********.top作为服务器名。
    • 当有请求到达80端口时,会将请求跳转到HTTPS的443端口。
server {
    listen 80;
    server_name ********.top; 
    return 301 https://$host$request_uri;
}
  • 文件名:ssl.conf
    • ssl.conf文件中,配置了一个HTTPS服务器,监听端口443,并设置www.*********g.top作为服务器名。
    • 同时,指定了证书文件和私钥文件的路径。
server {
    listen 443 ssl;
    server_name www.**********.top;
    ssl_certificate      /etc/nginx/ssl/certificate.crt;
    ssl_certificate_key  /etc/nginx/ssl/private.key;

    location / {
        root /soft/blog/myblog;
        index index.html;
    }
}
  • location /部分还配置了Nginx的访问根目录和默认首页,这里指定的是/soft/blog/myblog目录和index.html文件。

【4】重新加载Nginx配置文件

  • 执行以下命令以重新加载Nginx的配置文件,使其生效。
nginx -s reload
  • 通过以上步骤完成了将SSL证书配置到Nginx的过程,请确保按照以上步骤执行,并注意替换相关文件路径和域名信息。
posted @ 2023-08-22 09:15  Chimengmeng  阅读(125)  评论(0编辑  收藏  举报
/* */