Nginx配置SSL证书及跳转配置

Nginx 配置 SSL 证书

SSL 证书是一种数字证书,它使用 Secure Socket Layer 协议在浏览器和 Web 服务器之间建立一条安全通道,从而实现:

1、数据信息在客户端和服务器之间的加密传输,保证双方传递信息的安全性,不可被第三方窃听;2、用户可以通过服务器证书验证他所访问的网站是否真实可靠。HTTPS 是以安全为目标的 HTTP 通道,即 HTTP 下加入 SSL 加密层。HTTPS 不同于 HTTP 的端口,HTTP 默认端口为 80,HTTPS 默认端口为 443。

2、自签发 SSL 证书

  1. 生成一个 RSA 密钥
1
$ openssl genrsa -des3 -out apiw.key 1024
  1. 生成一个证书请求
1
$ openssl req -new -key apiw.key -out apiw.csr
  1. Nginx 使用的私钥需要去除密码口令
1
$ openssl rsa -in apiw.key -out apiw_nopass.key
  1. 自己签发证书
1
$ openssl x509 -req -days 3650 -in apiw.csr -signkey apiw_nopass.key -out apiw.crt

生成证书请求,会提示输入省份、城市、域名信息等,重要的是,email 一定要是你的域名后缀的。

Nginx 添加 SSL

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  www.xxx.com;
    root         /usr/share/nginx/html;
    ssl on;
    ssl_certificate "/etc/nginx/conf.d/apiw.crt";  #这里写crt
    ssl_certificate_key "/etc/nginx/conf.d/apiw_nopass.key";  #这里写key
    # 若ssl_certificate_key使用apiw.key,则每次启动Nginx服务器都要求输入key的密码,比较麻烦。
    ssl_protocols   TLSV1 TLSV1.1 TLSV1.2;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout  10m;  #设置ssl session 的共享内存cache,对性能有利
    ssl_ciphers AES128+EECDH:AES128+EDH:!aNULL;
    ssl_prefer_server_ciphers on;
    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 {
    }
}

http 强制跳转 https

1
2
3
4
5
6
7
8
9
server {
    listen 80;
    server_name _;
    location / {
        if ($ssl_protocol = "") {
            return 301 https://$server_name$request_uri;
        }
    }
}

参考