1. 程式人生 > >Centos7.2下Nginx配置SSL支持https訪問(站點是基於.Net Core2.0開發的WebApi)

Centos7.2下Nginx配置SSL支持https訪問(站點是基於.Net Core2.0開發的WebApi)

ack 保存 受害者 etc proxy cer 查看 綁定 客戶端

準備工作

1.基於nginx部署好的站點(本文站點是基於.Net Core2.0開發的WebApi,有興趣的同學可以跳http://www.cnblogs.com/GreedyL/p/7422796.html)

2.證書頒發機構(CA)頒發的有效證書,其中我們需要兩個文件,一個是 .key文件(私鑰),另一個是 .crt或.pem文件(公鑰)

核心功能

? 通過指定由受信任的證書頒發機構(CA)頒發的有效證書,將服務器配置為偵聽端口上的HTTPS流量

? 通過配置nginx.conf文件來加強安全性。示例包括選擇更強大的密碼,並將所有流量通過HTTP重定向到HTTPS。

? 添加HTTP Strict-Transport-Security

(HSTS)頭部確保客戶端所做的所有後續請求僅通過HTTPS。

nginx配置ssl,需要確保nginx包含相應的模塊--with-http_ssl_module

查看nginx安裝參數是否已經包含此模塊,如果未包含請先安裝此模塊

nginx -V

添加/etc/nginx/proxy.conf配置文件:

vi etc/nginx/proxy.conf
proxy_redirect             off;
proxy_set_header         Host             $host;
proxy_set_header        X-Real-IP         $remote_addr;
proxy_set_header        X-Forwarded-For    $proxy_add_x_forwarded_for;
proxy_set_header    X-Forwarded-Proto $scheme;
client_max_body_size     10m;
client_body_buffer_size 128k;
proxy_connect_timeout     90;
proxy_send_timeout         90;
proxy_read_timeout         90;
proxy_buffers            32 4k;

編輯/etc/nginx/nginx.conf配置文件。配置主要包含兩個部分httpserver。(如果有同學是配置在conf.d下的default.conf,可以將其備份或刪除)

vi /etc/nginx/nginx.conf
http {
    include    /etc/nginx/proxy.conf;
    limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
    server_tokens off;

    sendfile on;
    keepalive_timeout 29; # Adjust to the lowest possible value that makes sense for your use case.
    client_body_timeout 10; client_header_timeout 10; send_timeout 10;

    upstream hellomvc{
        server localhost:5000;
    }

    server {
        listen *:80;
        add_header Strict-Transport-Security max-age=15768000;
        return 301 https://$host$request_uri;
    }

    server {
        listen *:443    ssl;
        server_name     example.com;
        ssl_certificate /etc/ssl/certs/testCert.crt;
        ssl_certificate_key /etc/ssl/certs/testCert.key;
        ssl_protocols TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
        ssl_ecdh_curve secp384r1;
        ssl_session_cache shared:SSL:10m;
        ssl_session_tickets off;
        ssl_stapling on; #ensure your cert is capable
        ssl_stapling_verify on; #ensure your cert is capable

        add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
        add_header X-Frame-Options DENY;
        add_header X-Content-Type-Options nosniff;

        #Redirects all traffic
        location / {
            proxy_pass  http://hellomvc;
            limit_req   zone=one burst=10;
        }
    }
}

有幾處需要更改

? server_name改成你的域名=申請證書綁定的域名

? ssl_certificate改成你的公鑰路徑

? ssl_certificate_key改成你的私鑰路徑

一些安全配置

防止Clickjacking(點擊劫持),Clickjacking是一種惡意技術來收集受感染的用戶的點擊。劫持受害者(訪問者)點擊感染的網站,使用X-FRAME-OPTIONS。

編輯nginx.conf文件:

vi /etc/nginx/nginx.conf
將配置中的
add_header X-Frame-Options DENY;
更改為
add_header X-Frame-Options SAMEORIGIN;

重新加載nginx

service nginx reload

MIME類型的嗅探,此標頭防止大多數瀏覽器從聲明的內容類型中嗅探響應,因為標頭指示瀏覽器不要覆蓋響應內容類型,使用nosniff選項

編輯nginx.conf文件:

vi /etc/nginx/nginx.conf
添加行
add_header X-Content-Type-Options nosniff;

上文的nginx.conf已配置好此標頭,保存文件,重新啟動Nginx

Centos7.2下Nginx配置SSL支持https訪問(站點是基於.Net Core2.0開發的WebApi)