美文网首页nginx 教程
[深] nginx https(27)

[深] nginx https(27)

作者: 瓦力博客 | 来源:发表于2019-01-22 10:02 被阅读62次

    获取全套nginx教程,请访问瓦力博客

    超文本传输安全协议(Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

    http协议缺点

    • 传输数据被中间人盗用,信息泄露
    • 数据内容劫持,篡改

    1.对称加密和非对称加密

    对称加密

    ssl

    明文数据在发送方经过加密算法加密发送给接收方,接收方收到密文在用密钥解密完成。发送方加密密钥和接收方解密密钥要相同,就是对称加密。

    非对称加密

    ssl

    加密密钥和解密密钥不一样称为非对称加密(加密密钥称为公钥,解密密钥称为私钥)。

    2.https加密协议原理

    ssl

    https同时用了对称加密和非对称加密。客户端发起ssl连接,服务向客户端返回公钥,客户端收到公钥,用公钥加密对称密码在发送个服务器(这个操作是非对称加密)。后面输出传输利用
    对称加密来进行数据传输。

    3.中间人攻击

    ssl

    针对SSL的中间人攻击方式主要有两类,分别是SSL劫持攻击和SSL剥离攻击

    SSL劫持攻击

    SSL劫持攻击即SSL证书欺骗攻击,攻击者为了获得HTTPS传输的明文数据,需要先将自己接入到客户端和目标网站之间;在传输过程中伪造服务器的证书,将服务器的公钥替换成自己的公钥,这样,中间人就可以得到明文传输带Key1、Key2和Pre-Master-Key,从而窃取客户端和服务端的通信数据
    但是对于客户端来说,如果中间人伪造了证书,在校验证书过程中会提示证书错误,由用户选择继续操作还是返回,由于大多数用户的安全意识不强,会选择继续操作,此时,中间人就可以获取浏览器和服务器之间的通信数据

    SSL剥离攻击

    这种攻击方式也需要将攻击者设置为中间人,之后见HTTPS范文替换为HTTP返回给浏览器,而中间人和服务器之间仍然保持HTTPS服务器。由于HTTP是明文传输的,所以中间人可以获取客户端和服务器传输数据

    4.证书和私钥的生成

    注意:一般生成的文件放在/etc/nginx/ssl目录下,这是个好的习惯。

    检查openssl

    openssl version
    

    输出OpenSSL 1.0.2k-fips 26 Jan 2017证明有openssl,如果没有需要安装

    yum install openssl   #安装openssl
    yum install openssl-devel  #安装openssl-devel
    

    http_ssl_module

    nginx -V
    

    输出的编译参数有--with-http_ssl_module,nginx默认会编译进去,如果没有需要手动编译。

    1.创建服务器证书密钥文件 server.key

    openssl genrsa -des3 -out server.key 1024   
    

    回车后输入密码,确认密码,自己随便写,但要记住。

    2.创建服务器证书的申请文件 server.csr

    openssl req -new -key server.key -out server.csr
    

    输入的内容为:

    Enter pass phrase for root.key:  #输入前面创建的密码 
    Country Name (2 letter code) [XX]: #国家代号,中国输入CN 
    State or Province Name (full name) []: #省的全名,拼音 ShangHai
    Locality Name (eg, city) [Default City]: #市的全名,拼音 ShangHai
    Organization Name (eg, company) [Default Company Ltd]: #公司英文名  MyCompany Corp
    Organizational Unit Name (eg, section) []: #可以不输入 
    Common Name (eg, your name or your server's hostname) []:  #服务器的域名 如:example.com ,www.example.com 要不要加www看你访问的时候需不需要加
    Email Address []:  #你的邮箱
    A challenge password []: #可以不输入 
    An optional company name []:  #可以不输入 
    

    最后完成后,输入ls查看在你当前文件/etc/nginx/ssl下有没有server.key,erver.csr这两个文件

    3.备份一份服务器秘钥

    cp server.key server.key.org
    

    4.去除文件口令

    openssl rsa -in server.key.org -out server.key
    

    5.去除文件口令

    openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
    

    5.配置教程

    服务目录

    /opt/app/code
    |-index.html
    
    /etc/nginx/conf.d
    |-https.conf
    

    index.html

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <h1>欢迎来到瓦力博客</h1>
    </body>
    </html>
    

    https.conf

    server {
        listen       443;
        server_name  walidream.com www.walidream.com;
        
        ssl on; 
        ssl_certificate      /etc/nginx/ssl/server.crt;
        ssl_certificate_key  /etc/nginx/ssl/server.key;
    
        location / { 
           root /opt/app/code;
           index index.html;
        }   
    
    
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }   
    }
    

    检测语法并重启

    nginx -tc /etc/nginx/nginx.conf
    nginx -s reload -c /etc/nginx/nginx.conf
    

    注意: 小菜在这里用的是阿里云服务器,默认没有打开443端口。需要手动开放443端口

    输入域名https://walidream.com

    ssl ssl

    6.苹果证书配置

    配置苹果要求的证书

    • 服务器所有的连接使用TLS1.2以上版本(openssl 1.0.2)
    • HTTPS证书必须使用SHA2556以上哈希算法签名
    • HTTPS证书必须使用RSA 2048为或ECC 256位以上公钥算法
    • 使用向前加密技术

    查看openssl版本

    openssl version
    

    openssl的版本要在1.2,如果不在1.2版本以上,需要升级。新建updata.sh

    # 升级openssl 脚本
    cd /opt/download
    wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz
    tar -zxvf openssl-1.0.2k.tar.gz
    cd openssl-1.0.2k
    ./config --prefix=/usr/local/openssl 
    make && make install 
    mv /usr/bin/openssl   /usr/bin/openssl.OFF 
    mv /usr/include/openssl   /usr/include/openssl.OFF 
    ln -s   /usr/local/openssl/bin/openssl   /usr/bin/openssl 
    ln -s   /usr/local/openssl/include/openssl   /usr/include/openssl 
    echo "/usr/local/openssl/lib"  >>/etc/ld.so.conf 
    ldconfig -v
    openssl version -a
    ```
    
    执行 
    
        sh updata.sh
    
    #### 查看当前使用自签证书的类型
    
        openssl x509 -noout -text -in ./server.crt
    
    ![ssl](https://img.haomeiwen.com/i9150023/37beabca9235e4c0.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    
    # 7.直接通过key来生成证书
    
    在上面`证书和私钥的生成`生成顺序先生成`server.key`-->在生成`server.csr`-->最后生成`server.crt`,我们将直接通过key来生成crt
    
        openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
    
    去掉密码保护码
    
        openssl -in ./server.key -out ./server_nopas.key
    
    
    # 8.https优化服务优化
    
    #### 激活keepalive长连接
    
    打开长连接,一次连接如果可以处理更多的请求,建立握手次数变少,对服务端的性能提升
    
    #### 设置ssl session缓存
    
    设置ssl session缓存把部分信息内容放在缓存,这样服务器处理资源cpu就会变少,就会变得更加快速
    
    
    # 9.https配置session
    
    ```nginx
    server
     {
       listen       443;
       server_name  walidream.com;
       
       keepalive_timeout 100;
       
       ssl on;
       ssl_session_cache shared:SSL:10m;
       ssl_session_timeout 10m;
       
       ssl_certificate /etc/nginx/ssl_key/server.crt;
       ssl_certificate_key /etc/nginx/ssl_key/server.key;
       
       location / {
           root  /opt/app/code;
           index index.html index.htm;
       }
    }
    ```
    
    
    

    相关文章

      网友评论

        本文标题:[深] nginx https(27)

        本文链接:https://www.haomeiwen.com/subject/nzccjqtx.html