HTTPS

1.什么是Https

    HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 
    它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。
    这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面

2.为什么要使用Https

1、HTTP存在的几点不足:

通信使用明文,内容可能会被窃听;不验证通信方的身份,因此有可能遭遇伪装;无法证明报文的完整性,有可能已遭篡改。

2、《网络安全法》的相关规定。

3、越来越多场景的强制性要求。

IOS、谷歌等要求的 APP 分发下载必须使用 https 安全连接;

微信小程序、支付宝小程序强制使用 HTTPS;

银行支付相关业务必须是HTTPS。

谷歌浏览器70版本显示醒目的(红色)HTTP页面不安全警告。

等保测评的相关要求,“应采用校验码/密码加密的技术保证通信过程中数据的完整性”。

英美强制要求所有政府网站 2016 年实现全站 HTTPS 加密;

新一代 HTTP/2 协议的支持需以 HTTPS 为基础;

4、利于网站搜索引擎优化。

搜索引擎如谷歌,百度站在确保用户信息安全的角度,都在大力倡导网站部署SSL证书实现https加密访问。在搜索、展现、排序方面也给予部署了SSL证书网站优待。

3.模拟不使用Https的劫持和篡改?

自行百度吧

4.Https通讯是如何确定双方的身份?

公钥和私钥就是俗称的不对称加密方式。公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对外公开的部分,私钥则是非公开的部分。公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。

通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,则必须用另一个密钥才能解密。比如用公钥加密的数据就必须用私钥才能解密,如果用私钥进行加密也必须用公钥才能解密,否则将无法成功解密。

5.Https证书类型、购买指南、注意事项?

域名型(DV)SSL证书、企业型(OV)SSL证书、增强型(EV)SSL证书,具体请见SSL证书详解——提升信息安全

6.HTTPS证书购买指南 oldxu.com

    保护1个域名 www                              docs.oldxu.com
    保护5个域名 www images cdn test m            docs.oldxu.com  www.oldxu.com iamges.oldxu.com
    通配符域名 *.oldboy.com
            1套证书
            保护所有的域名

7.HTTPS注意事项

  Https不支持续费,证书到期需重新申请新并进行替换。
  Https不支持三级域名解析,如 test.m.oldboy.com。
  Https显示绿色,说明整个网站的url都是https的,并且都是安全的。
  Https显示黄色,说明网站代码中有部分URL地址是http不安全协议的。
  Https显示红色,要么证书是假的,要么证书已经过期。       
#创建存放ssl证书的路径
[root@Nginx ~]# mkdir -p /etc/nginx/ssl_key
[root@Nginx ~]# cd /etc/nginx/ssl_key

1.生成证书 (密码1234)
[root@Nginx ~]# openssl genrsa -idea -out server.key 2048

2.生成自签证书,同时去掉私钥的密码
openssl req -days 36500 -x509 \
-sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
    

3.配置nginx
[root@web01 conf.d]# cat s.oldux.com.conf 
server {
    listen 443 ssl;
    server_name s.oldxu.com;
    root /code;
    ssl_certificate ssl_key/server.crt;
    ssl_certificate_key ssl_key/server.key;

    location / {
        index index.html;
    }
}
server {
    listen 80;
    server_name s.oldxu.com;
    return 302 https://$http_host$request_uri;  
}


            
1.先配置好后端的web节点
2.在负载均衡上申请证书(如果之前申请过也可以推送)      <----
3.配置nginx负载均衡--->http协议
4.配置域名劫持
5.配置nginx负载均衡--->转为https协议

[root@lb01 conf.d]# cat proxy_s.oldxu.com.conf 
upstream webs {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
}

server {
    listen 443 ssl;
    ssl_certificate ssl_key/server.crt;
    ssl_certificate_key ssl_key/server.key;

    server_name s.oldxu.com;
    location / {
        proxy_pass http://webs;
        include proxy_params;
    }
}

server {
    listen 80;
    server_name s.oldxu.com;
    return 302 https://$http_host$request_uri;
}


------------------------------------------------
[root@lb01 conf.d]# cat proxy_blog.oldxu.com.conf 
upstream blog {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
}

server {
    listen 443 ssl;
    server_name blog.oldxu.com;
    
    ssl_certificate ssl_key/server.crt;
    ssl_certificate_key ssl_key/server.key;

    location / {
        proxy_pass http://blog;
        proxy_next_upstream error timeout http_500 http_502 http_503;
        include proxy_params;
    }
}

server {
    listen 80;
    server_name blog.oldxu.com;
    return 302 https://$http_host$request_uri;
}
--------------------------------------------------------------------------------
[root@web02 conf.d]# cat blog.oldxu.com.conf 
server {
    listen 80;
    server_name blog.oldxu.com;
    root /code/wordpress;

    client_max_body_size 100m;
    location / {
        index index.php;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param HTTPS on;
        include fastcgi_params;
    }
}

8需求: 部分URL走https,部分不走https?

 s.oldxu.com/login  ---> https
 
[root@lb01 conf.d]# cat proxy_s.oldxu.com.conf 
upstream webs {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
}

server {
    listen 443 ssl;
    ssl_certificate ssl_key/server.crt;
    ssl_certificate_key ssl_key/server.key;

    server_name s.oldxu.com;
    location / {
        proxy_pass http://webs;
        include proxy_params;
    }
}
server {
    listen 80;
    server_name s.oldxu.com;
    
    if ($request_uri ~* "^/login") {
        return 302 https://$http_host$request_uri;
    }

    location / {
        proxy_pass http://webs;
        include proxy_params;
    }
}

9.需求: 当用户请求s.oldxu.com/abc时走http,其他的所有都走https?

    s.oldxu.com/       ---> https
    s.oldxu.com/abc    ---> http

[root@lb01 conf.d]# cat proxy_s.oldxu.com.conf 
upstream webs {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
}

server {
    listen 443 ssl;
    ssl_certificate ssl_key/server.crt;
    ssl_certificate_key ssl_key/server.key;

    server_name s.oldxu.com;
    location / {
        proxy_pass http://webs;
        include proxy_params;
    }
}
server {
    listen 80;
    server_name s.oldxu.com;
    
    if ($request_uri !~* "^/abc") {
        return 302 https://$http_host$request_uri;
    }

    location / {
        proxy_pass http://webs;
        include proxy_params;
    }
}

10.https优化相关的参数?

server {
    listen 443 ssl;
    server_name nginx.bjstack.com;
    
    ssl_certificate ssl_key/1524377920931.pem;
    ssl_certificate_key ssl_key/1524377920931.key;
    ssl_session_cache shared:SSL:10m;   #在建立完ssl握手后如果断开连接,在session_timeout时间内再次连接,是不需要在次建立握手,可以复用之前的连接
    ssl_session_timeout 1440m;           #ssl连接断开后的超时时间
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #使用的TLS版本协议
    ssl_prefer_server_ciphers on;        #Nginx决定使用哪些协议与浏览器进行通讯
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #配置加密套间

l   ocation / {
        root /soft/code;
        index index.html index.htm;
    }
}
server {
        listen 80;
        server_name nginx.bjstack.com;
        return 302 https://$server_name$request_uri;
}
    

11.需求: 公司网站在停机维护时,指定的IP能够正常访问,其他的IP跳转到维护页。10.0.0.1 10.0.0.100

[root@web01 conf.d]# cat s.oldux.com.conf 
server {
    listen 80;
    server_name s.oldxu.com;
    root /data;

    set $ip 0;
    if ($remote_addr ~* "10.0.0.1|10.0.0.100"){
        set $ip 1;
    }

    if ($ip = "0"){
        rewrite ^(.*)/$ /wh.png break;
    }


    location / {
        index index.html;
    }
}

你可能感兴趣的:(HTTPS)