基于Liunx搭建https服务器(SSL协议/相关服务器搭建)

问题:在浏览器中输入www.baidu.com之后发生了什么?

 1.把www.baidu.com解析成ip-> 域名解析
           a.计算机查看浏览器的dns缓存,如果没有则b
           b.计算机的dns本地服务器,如果没有则c (此时开始从根目录开始依次询问)

           c.先去请求根服务器——> www.bai.com——> .com的域名服务器在哪儿?
           d.本地dns再去请求.com域名服务器——> baidu域名服务器在哪儿?
           e.本地dns再去请求baidu域名服务器——> www域名服务器在哪儿?
           f.本地dns去请求www服务器——> 如果www域名服务器,有这个ip返回给你,

                                                                  如果没有,未能解析
2. 进行tcp连接: 三次握手
3. 发送http请求(http/https)
4. 获取响应
5. 浏览器进行渲染解析
6. 断开连接的时候: tcp四次挥手

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

        HTTPS并不是一个新协议,而是HTTP+SSL。原本HTTP和TCP组合通信,而加了SSL后,就变成HTTP先和SSL通信,再由SSL和TCP通信,相当于SSL被嵌在了HTTP和TCP之间。 

    SSL协议:

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

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

        SSL协议提供的服务:①认证用户和服务器,确保数据发送到正确的客户端和服务端②加密数据以防止数据中途被窃取③维护数据的完整性,确保数据在传输过程中不被改变。

    过程

    首先客户端向服务端发送请求:
          ①客户端支持的协议版本号
          ②客户端支持的加密算法(密钥,算法)
          ③客户端产生随机数random_client_num1
     然后服务端在收到客户端发来的请求后回复:
           ①服务端发送协商好的协议版本
           ②服务端发送协商好的加密算法
           ③服务端发送服务器证书AC
           ④服务器产生随机数random_server_num1
    客户端在接受服务端发送到数据后:
           首先验证服务器证书AC合法性,如果不合法,通讯断开如果合法,则可以从服务器证书中获取到公开的密钥。然后客户端通过证书里面的公钥产生一个对称密钥,然后用服务器公钥进行加密,并加密后的对称密钥传给服务器。
     此时,服务端接受到客户端发来的对称密钥:
        服务端通过用自己的私钥对客户端发来的对称密钥进行解密,并使用对称密钥进行文件传输。

SSL四次握手的具体过程:

        第一阶段: 此时客户端向服务端发送ClientHello包,服务端回复一个SeverHello包,此时客户端产生一个随机数client_null(这个阶段是客户端和服务端通信为hello包)

        第二阶段:此时服务端为唯一发送方,向客户端发送AC证书及其根连接发送给客户端,服务端会产生一个随机数server_null(Certificate[证书],Server Key Exchange[公钥],Certificate Request[验证客户端证书请求] 和ServerHello Done[hello结束])


        第三阶段:客户端成为这个阶段的唯一发送方,服务端成为唯一接收方。客户端在接受服务端发来的信息交流过程中产生第三个随机数:pre_master,这个随机数是根据服务端(根据公钥产生的对称密钥)和客户端产生的client_num和server_num通过密钥交换算法产生的。客户端将pre_master和产生这个随机数的对称密钥发给服务器。(此时客户和服务端都掌握三个随机数,利用相同算法算出main_master--->这就是对称密钥)

        第四阶段:此时服务端通过对称密钥将自己的算出的随机数发送给客户端,并达成SSL四次握手

关于AC证书:

搭建静态https的服务器:

//①使用yum下载文件包,进行httpd文件安装
[root@localhost ~]# yum install mod_ssl -y
//②配置创建连接的index.html文件(访问的目录)
[root@localhost www]# mkdir -pv https
[root@localhost www]# cd /www/https/
[root@localhost https]# vim index.html 
    // vim编辑index的文件
   This is my first https page
//③配置更改阿帕奇登录页面的权限设置
[root@localhost certs]# cd /etc/httpd/conf.d
    autoindex.conf  host.conf  README  ssl.conf  userdir.conf  welcome.conf
[root@localhost conf.d]# vim host.conf 
        //<Directory>为分配权限 (文件位置,允许人,给予权限)
    <Directory "/www/https">  
    AllowOverride  none
    Require all granted
    </Directory>
        //监听这个ip地址下的443端口
    #listen 443
        // <VirtualHost>配置虚拟机(文档位置,服务名,ssl服务引擎打开,协议选择,密码选择套件,认证证书(公钥,信息),配置私钥)
    <VirtualHost 192.168.220.132:443>
    DocumentRoot "/www/https"
    ServerName 192.168.220.132
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/localhost.crt
    #证书
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
    #密钥
    </VirtualHost>
[root@localhost conf.d]# systemctl stop firewalld
//刷新,关闭防火墙,设置可信任
[root@localhost conf.d]# setenforce 0
[root@localhost conf.d]# systemctl restart httpd

这个时候去访问(https://192.168.220.132显示为一个不安全的连接(原因:自己搭建的服务器没有获得AC认证)) 

基于https协议下搭建一个访问需要验证的网页:

//由于之前已经ym配置好centos
//首先设置密码和密码文件位置
[root@localhost usr]#  htpasswd -c /usr/local/etc/passwords test
        //passwd:123456
[root@localhost usr]#  mkdir -pv /usr/local/mysecret
[root@localhost usr]#  echo "My secret" >> /usr/local/mysecret/index.html
        //转到密码文件的index.html 并将passwords存放在mysecret下
[root@localhost usr]#  cd /etc/httpd/conf.d
[root@localhost usr]#  vim host.conf 
        //设置为监听8001端口
    listen  8001
    <Directory "/usr/local/mysecret">
    AuthType Basic
    AuthName "Hello"
    AuthBasicProvider  file
    AuthUserFile "/usr/local/etc/passwords"
    Require user test
    </Directory>
    <VirtualHost "192.168.220.132:8001">
    alias "/mysecret"  "/usr/local/mysecret"
    ServerName 192.168.220.132
    </VirtualHost>
        //alias为一个转移符,将如果访问文件"/mysecret",则会转移到"/usr/local/mysecret"
[root@localhost conf.d]# systemctl stop firewalld
        //刷新,关闭防火墙,设置可信任
[root@localhost conf.d]# setenforce 0
[root@localhost conf.d]# systemctl restart httpd
//此时可能会报错,需要修改文件的权限/usr/local/mysecret(chown +x /usr/local/mysecret)

此时如果需要访问这个带密码的文档时,需要在ip地址后加上端口号和这个文件位置 /mysecret

 基于https协议下搭建一个CGI访问的网页(动态页面):

         WSGI(Web Server Gateway Interface)是一个统一的Python接口标准(PEP 3333),该标准描述了Python应用如何与Web服务器通信,多个Python应用之间如何级联以处理请求。

//首先配置cgi的文件
[root@localhost ~]# mkdir -p /www/cgi
[root@localhost ~]# cd /www/cgi
        //在cgi文件内写入内容
[root@localhost ~]# vim cgi
    #!/bin/bash
    printf "Context-type:text/html\n\n"
    printf "Hello World for CGI"
[root@localhost ~]# cd /etc/httpd/conf.d
[root@localhost conf.d]# vim host.conf
    <Directory "/www/cgi">
    AllowOverride none
    Options +ExecCGI
    AddHandler cgi-script .cgi .py .pl
    require all granted
    </Directory>
    listen 8002
    <VirtualHost 192.168.233.200:8002>
    ScriptAlias /cgi /www/cgi 
    ServerName 192.168.233.200
    </VirtualHost>
[root@localhost conf.d]# chown +x /www/cgi
//给予执行权限
[root@localhost conf.d]# systemctl stop firewalld
//刷新,关闭防火墙,设置可信任
[root@localhost conf.d]# setenforce 0
[root@localhost conf.d]# systemctl restart httpd

练习: 

//搭建一个基于https://www.zuoye.com:4443访问的web网站
//网站首页在/www/https/,内容为zuoye


//首先产生密钥和AC证书(地址在/etc/httpd/conf.d下)
[root@lxb conf.d]# openssl genrsa -aes128 2048 >1.key
Generating RSA private key, 2048 bit long modulus (2 primes)
..........................................+++++
................................................................+++++
e is 65537 (0x010001)
Enter pass phrase:
Verifying - Enter pass phrase:

//创建AC证书
[root@lxb conf.d]# openssl req -utf8 -new -x509 -key 1.key -out 1.crt
Enter pass phrase for 1.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) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:

//此时证书为1.crt,密钥为1.key.然后去配置文件
[root@lxb conf.d]# vim host2.conf 

listen 4443
<virtualhost 192.168.220.250 >
        SSLEngine on
        SSLCertificateFile  /etc/httpd/conf.d/1.crt
        SSLCertificateKeyFile  /etc/httpd/conf.d/1.key
        DocumentRoot /www/https
        ServerName 192.168.220.250
</virtualhost>
<directory /www/https>
        allowoverride none
        require all granted
</directory>

//然后去配置/www/https的文件
[root@lxb / ]#  cd /www/https
[root@lxb https]# echo zuoye  > index.html 

//然后重启服务(此时要输入密钥)
[root@lxb conf.d]# systemctl restart httpd
Enter TLS private key passphrase for 192.168.220.251:443 (RSA) : ****

//连接192.168.220.250:4443
[root@lxb conf.d]# curl https://192.168.220.250:4443 -k
zuoye

//而此时需要在window上产生物理缓存
C:\Windows\System32\drivers\etc\hosts
192.168.220.250     www.zuoye.com
此时再次登录,发现实现登录

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统中,常用的邮件服务器软件有Sendmail、Postfix、Exim等。以下是使用Postfix搭建SMTP服务器的步骤: 1. 安装Postfix:在终端中运行以下命令安装Postfix: ``` sudo apt-get update sudo apt-get install postfix ``` 2. 配置Postfix:在终端中运行以下命令打开Postfix的主配置文件: ``` sudo nano /etc/postfix/main.cf ``` 在文件中进行以下配置: ``` myhostname = example.com mydestination = example.com, localhost.localdomain, localhost relayhost = [smtp.example.com]:587 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_tls_CAfile = /etc/postfix/cacert.pem smtp_use_tls = yes ``` 其中,myhostname是你的主机名,mydestination是你的邮件目标地址,relayhost是你的SMTP服务器地址和端口,smtp_sasl_auth_enable启用SASL验证,smtp_sasl_password_maps指定SASL验证的用户名和密码,smtp_sasl_security_options禁用匿名登录,smtp_tls_CAfile指定TLS证书的路径,smtp_use_tls启用TLS加密。 3. 配置SASL密码文件:在终端中运行以下命令打开SASL密码文件: ``` sudo nano /etc/postfix/sasl_passwd ``` 在文件中添加SMTP服务器的用户名和密码: ``` [smtp.example.com]:587 username:password ``` 然后运行以下命令生成密码文件的哈希值: ``` sudo postmap /etc/postfix/sasl_passwd ``` 4. 配置TLS证书:在终端中运行以下命令生成TLS证书: ``` sudo openssl req -new -x509 -days 365 -nodes -out /etc/postfix/cacert.pem -keyout /etc/postfix/cacert.key ``` 在运行命令时,你需要填写一些证书信息。 5. 重启Postfix服务:在终端中运行以下命令重启Postfix服务: ``` sudo systemctl restart postfix ``` 现在你可以使用SMTP客户端来连接你的SMTP服务器并发送邮件了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值