web服务器(https)

目录

第四章Web服务器

基于https协议的静态网站

概念解释

SSL协议分为两层:

SSL协议提供的服务:

HTTPS安全通信机制

过程:

PKI

使用nginx的http_ssl模块建立加密认证网站

查看

配置文件

ssl配置文件的主要参数

实验1

实验2

第四章Web服务器

基于https协议的静态网站

概念解释

  • 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。

  • HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字超文本传输协议HTTPS

  • HTTPS(全称:Hyper Text Transfer protocol over Secure Socket Layer或Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道

  • HTTPS并不是一个新协议,而是HTTP+SSL(TLS)。原本HTTP先和TCP(假定传输层是tcp协议)直接通信,而加了SSL后,就变成HTTP先和SSL通信,再有SSL和TCP通信,相当于SSL被嵌再HTTP和TCP之间

    img

  • SSL是“Secure Sockerts Layer”的缩写,中文叫做“安全套接层”。它是在上世纪90年代中期,由网景公司设计的。到了1999年,SSL应用广泛,已经成为互联网上的事实标准。IETF就把SSL标准化。标准化之后SSL被改为TLS(Transport Layer Security 传输层安全协议)

SSL协议分为两层:
  • SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能

  • SSL握手协议(SSL Handshake Protocol):他建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等

SSL协议提供的服务:
  • 认证用户和服务器,确保数据发送到正确的客户机和服务器

  • 加密数据以防止数据中途被窃取

  • 维护数据的完整性。确保数据在传输过程中不被改变

HTTPS安全通信机制
  • img

过程:
  • 第一步:客户端(通常是浏览器)向服务端发送加密通信的请求,然后连接到服务端的==443==端口,这被叫做ClientHello请求,客户端主要服务器提供一下信息

    • 支持的协议版本,比如TLS 1.0版

    • 一个客户端生成的随机数1,稍后用于生成“会话密钥”

    • 支持的加密算法,比如RSA公钥加密。

    • 支持的压缩方法

  • 第二步:服务端回应(ServerHello),接受到信息之后给予客户端响应握手信息,服务器的回应包含一下内容

    • 确认使用的加密通信协议版本,比如TLS 1.0版本,如果浏览器与服务器支持的版本不一致,服务器关闭加密通信

    • 一个服务器生成的随机数2,稍后用于生成“会话密钥”。

    • 确认使用的加密方法,这个加密算法一定是client发送给server加密算法的子集,比如RSA公钥加密

    • 服务器证书:可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用收信任的公司申请的证书则不会弹出提示页面,传送的证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方认证机构(CA)的签名等

    • 除此之外,如果服务器需要使用双向认证,就会在包含一项请求,要求客户端提供“客户端证书”。比如,金融机构往往只允许认证客户炼乳自己的网络,就会向正式客户提供USB密钥,里面就包含了一张客户端证书

  • 第三步:客户端回应:客户端收到服务器回应以后进行证书解析,首先会验证证书是否有效,比如颁发机构,过期证书等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那就生成一个随机数3(预主密钥“pre-master key”),接下来是通过随机值1,随机值2和随机值3组装会话密钥。然后通过服务器端证书的公钥加密会话密钥,传送加密信息,内容如下:

    • 一个随机数C。该随机数用服务器公钥加密,防止被窃听

    • 编码改变通知,表示随后的信息都将用双方商定的机密算法和密钥发送

    • 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的Hash,用来共服务器校验

  • 第四步:服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的“会话密钥”(对称密钥)。然后,向客户端最后发送下面信息。

    • 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送

    • 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的Hash值,用来供客户端校验

  • 至此,整个握手阶段全部结束,接下来,客户端与服务器进入加密通信,就完全是使用普通HTTP协议,只不过用“会话密钥”加密内容

  • 大致分为三个阶段:

    • 1,2 认证服务器:浏览器内置以后个受信任的CA机构列表,并保存了这些CA机构的证书。第一阶段服务器会提供经CA机构认证颁发的服务器证书,如果认证的CA机构,存在于浏览器的受信任CA机构列表中,并且服务器证书的CA机构,存在于浏览器的受信任CA机构列表中,并且服务器证书中的信息与房前正在访问的网站(域名等)一致,那么浏览器就认为服务端是可信的,并从服务器证书中取得服务器公钥,用于后续流程。否则,浏览器将提示用户,根据用户的选择,决定是否继续。当然,我们可以管理这个受信任nCA机构列表,添加我们想要信任的CA机构,或者移除我们不信任的CA机构列表,添加我们想要信任的CA机构,或者移除

    • 3、4 协商会话密钥:客户端在认证完服务器,获得服务器的公钥之后,利用该公钥与服务器进行加密通信,协商出两个会话密钥,分别是用于加密客户端王服务端发送数据的客户端会话密钥,用于加密服务端往客户端发送的服务端会话密钥。在已有服务器公钥,可以加密通讯的前提下,还要协商两个对称密钥的原因,是因为非堆成加密相对复杂度较高,在数据传输过程中,使用对称加密,可以节省计算资源。另外,会话密钥是随机生成,每次协商都会不一样,所以安全性比较高

    • 加密通讯:此时客户端服务器双方都有了本次通讯的会话密钥,之后传输的所有HTTP数据,都通过会话密钥加密。这样网络上的其他用户,很难窃取信息了,从而保证了数据的私密性和完整性

PKI
  • PKI(Public Key Infrastructure)公钥基础设施是提供公钥加密和数字签名的系统或平台,目的是管理密钥和证书。一个机构通过采用PKI框架管理密钥和证书可以建立一个安全的网络环境

  • PKI主要包括四个部分:X.509格式的证书(X.509 V3)和证书废止列表CRL(X.509 V2);CA操作协议;CA管理协议;CA政策制定

  • X.509通用的证书格式包括:key csr crt

    • key是私钥文件

    • csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名

    • crt 是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人信息,持有人的公钥,以及签署者的签名等信息

使用nginx的http_ssl模块建立加密认证网站

查看
  • 查看

    [root@server ~]# nginx -v
    # 看是否有--with-http_ssl_module模块,否则需要安装mod_ssl
配置文件
  • 证书文件:/……/xxxx.crt

  • 私钥文件:/……/xxxx.key

ssl配置文件的主要参数
  • 配置文件

    [root@server ~]# vim /etc/nginx/nginx.conf
    默认为注释,可以取消注释
    # Settings for a TLS enabled server.
    #
    #    server {
    #        listen       443 ssl http2;    # 监听443端口
    #        listen       [::]:443 ssl http2;   
    #        server_name  _;                  # 域名
    #        root         /usr/share/nginx/html;    # 网页默认
    #
    #        ssl_certificate "/etc/pki/nginx/server.crt";   # 证书路径
    #        ssl_certificate_key "/etc/pki/nginx/private/server.key";  # 私钥文件路径
    #        ssl_session_cache shared:SSL:1m;
    #        ssl_session_timeout  10m;
    #        ssl_ciphers PROFILE=SYSTEM;
    #        ssl_prefer_server_ciphers on;
    #
    #        # Load configuration files for the default server block.
    #        include /etc/nginx/default.d/*.conf;
    #
    #        error_page 404 /404.html;
    #            location = /40x.html {
    #        }
    #
    #        error_page 500 502 503 504 /50x.html;
    #            location = /50x.html {
    #        }
实验1
  • 搭建nginx+ssl的加密认证web服务器

  • 第一步:准备工作

    # 恢复快照
    [root@server ~]# sentencforce 0
    ​
    [root@server ~]# systemctl stop firewalld 
    ​
    [root@server ~]# systemctl disable firewalld
    ​
    [root@server ~]# dnf install nginx mod_ssl -y
    ​
    [root@server ~]# systemctl start nginx
    ​
    [root@server ~]# systemctl enable nginx
  • 第二步:新建存储网站的文件目录

    [root@server ~]# mkdir -p /www/zy
  • 第三步:制作证书

    [root@server ~]# openssl genrsa -ase128 2048 > /etc/nginx/zy.key
    Generating RSA private key, 2048 bit long modulus (2 primes)
    ............+++++
    ......................................................................................................................................................................................................+++++
    e is 65537 (0x010001)
    Enter pass phrase:             # 输入加密私钥的密码123456
    Verifying - Enter pass phrase: # 再输一遍
    ​
    # 制作证书
    [root@server ~]# openssl req -utf8 -new -key /etc/nginx/zy.key -x509 -days 365 -out /etc/nginx.zy.crt
    Enter pass phrase for /etc/nginx/zy.key:    # 需要输入加密私钥的密码
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    # 注意:下列证书信息项目,在面试时常问
    Country Name (2 letter code) [AU]:86                              # 国家代码
    State or Province Name (full name) [Some-State]:shanxi            # 省份
    Locality Name (eg, city) []:xi'an                                 # 城市
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:openlab# 公司
    Organizational Unit Name (eg, section) []:RHCE                    # 部门
    Common Name (e.g. server FQDN or YOUR name) []:server             # 主机名
    Email Address []:andy@qq.com                                      # 邮箱
    ​
    # 在加载SSL支持的Nginx并使用上述私钥时除去必须的口令
    [root@server ~]# cd - /etc/nginx
    [root@server ~]# cp zy.key zy.key.org
    [root@server ~]# openssl rsa in zy.ley.org -out zy.key
    Enter pass phrase for zy.key.org:  # 输入加密私钥的密码
    writing RSA key
  • 第五步:修改配置文件

    [root@server nginx]# cd 
    [root@server ~]# vim /etc/nginx/nginx.conf
    server {
            listen 443;
            server_name _;
            root /www/zy;
            ssl_certificate /etc/nginx/zy.crt;
            ssl_certificate_key /etc/nginx/zy.key;
    }
    server { # 输入http跳转到https
            listen 80;
            server_name 192.168.40.131;
            return 301 https://192.168.40.131
    }
  • 第六步:重启服务

    [root@server ~]# nginx -t # 检测有没有代码错误
    [root@server ~]# systemctl restart nginx
  • 第七步:测试

    # 在windows端打开浏览器,输入https://192.168.48.130,点击高级->接受风险并继续

    image-20230528104515175

实验2
  • 组建多个子目录网站www.openlab.com,该网站有2个子目录www.openlab.com/filewww.openlab.com/ftp,要求:

    • file数据使用http读取

    • ftp数据使用https读取

  • 第一步:准备工作

    [root@server ~]# setenforce  0           
    ​
    [root@server ~]# systemctl stop  firewalld
    ​
    [root@server ~]# systemctl disable  firewalld
    ​
    [root@server ~]# dnf  install  nginx -y
    ​
    [root@server ~]# systemctl start  nginx   # 启动nginx
     
    [root@server ~]# systemctl enable  nginx  # 设置开机启动
  • 第二步:新建网页目录并建立网页

    [root@server ~]# mkdir -p /www/file
    [root@server ~]# mkdir -p /www/ftp
    [root@server ~]# echo "file" > /www/file
    [root@server ~]# echo "ftp" > /www/ftp
  • 第三步:建立本地hosts域名映射

    [root@server ~]# vim /etc/hosts
    192.168.48.130 www.oepnlab.com
  • 第四步:编辑主配置文件

    [root@server ~]# vim /etc/nginx/nginx.conf
    server {
            listen 80;
            server_name www.openlab.com;
            location /file {
                            alias /www/file/;
                            index index.html index.htm;
            }
    }
  • 第五步:建立https网站

    • [root@server ~]# openssl genrsa -aes128 2048 /etc/nginx/ftp.key
      Generating RSA private key, 2048 bit long modulus (2 primes)
      ............+++++
      ......................................................................................................................................................................................................+++++
      e is 65537 (0x010001)
      Enter pass phrase:             # 输入加密私钥的密码123456
      Verifying - Enter pass phrase: # 再输一遍
      ​
      # 制作证书
      [root@server ~]# oepnssl req -utf8 -new -key /etc/nginx/ftp.key -x509 -day 365 -out /etc/nginx/ftp.crt
      Enter pass phrase for /etc/nginx/ftp.key:    # 需要输入加密私钥的密码
      You are about to be asked to enter information that will be incorporated
      into your certificate request.
      What you are about to enter is what is called a Distinguished Name or a DN.
      There are quite a few fields but you can leave some blank
      For some fields there will be a default value,
      If you enter '.', the field will be left blank.
      -----
      # 注意:下列证书信息项目,在面试时常问
      Country Name (2 letter code) [AU]:86                              # 国家代码
      State or Province Name (full name) [Some-State]:shanxi            # 省份
      Locality Name (eg, city) []:xi'an                                 # 城市
      Organization Name (eg, company) [Internet Widgits Pty Ltd]:openlab# 公司
      Organizational Unit Name (eg, section) []:RHCE                    # 部门
      Common Name (e.g. server FQDN or YOUR name) []:server             # 主机名
      Email Address []:andy@qq.com                                      # 邮箱
      ​
      # 在加载SSL支持的Nginx并使用上述私钥时除去必须的口令
      [root@server ~]# cd /etc/nginx
      [root@server nginx]# cp ftp.key ftp.key.org
      [root@server nginx]# openssl rsa -in ftp.key.org -out ftp.key
      Enter pass phrase for ftp.key.org:  # 输入加密私钥的密码
      writing RSA key
      [root@server ~]# vim /etc/niginx/nignx.conf
      server {
              listen 443;
              server_name www.oepnlab.com;
              location /ftp {
                              ailis /www/ftp/;
                              index index.html index.htm;
              }
              ssl_certificate /etc/nginx/ftp.crt;
              ssl_certificate_key /etc/nginx/ftp.key;
      }
  • 第六步:重启,测试

    [root@server ~]# systemctl restart nginx
    # 输入www.openlab.com/file
    # 输入https://www.openlab.com/ftp,点击高级->接受风险并继续v
  • 17
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
web服务器https是指使用HTTPS协议来进行数据传输的一种方式。HTTPS是HTTP协议的安全版本,通过使用SSL/TLS协议对数据进行加密和身份验证,确保数据传输的安全性和完整性。 对于Node、webpack-dev-server和nginx这三个常见的前端web服务器,配置HTTPS的方法如下: 1. 在Node服务器中配置HTTPS,可以使用Node的HTTPS模块。首先需要生成一个私钥和证书,可以使用openssl命令生成。然后在代码中引入私钥和证书,创建一个HTTPS服务器实例并监听指定的端口。具体代码可参考文献提供的链接。 2. 在webpack-dev-server中配置HTTPS,只需要在webpack配置文件中将devServer的https选项设置为true即可。具体代码可参考文献提供的链接。 3. 在nginx中配置HTTPS,需要在nginx的配置文件中添加HTTPS相关的配置,包括证书的位置、私钥的位置、监听的端口等。具体的配置可以参考nginx的官方文档或者其他相关文档。 需要注意的是,配置HTTPS还需要使用有效的SSL证书,证书一般可以从证书颁发机构(CA)处获得,也可以自己生成自签名证书。自签名证书在开发和测试环境中可以使用,但在生产环境中建议使用由受信任的CA颁发的证书,以确保安全性和信任度。 总结起来,配置web服务器HTTPS需要生成有效的SSL证书,并按照具体的服务器类型进行相应的配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Https在各种Web服务器下配置](https://blog.csdn.net/weixin_33753003/article/details/91388597)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值