Openssl自签证书|Nginx配置全站HTTPS,包括WSS(websocket)-LMLPHP

一.生成自签证书

如果有购买证书的,可忽略此步骤。

生成方法一:

openssl genrsa -des3 -out ca.key 2048
openssl rsa -in ca.key -out ca.key.nopass
openssl req -new -key ca.key.nopass -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey ca.key.nopass -out server.crt

生成方法二:

1. 建立 CA 密钥

创建 ca.key 密钥文件

openssl genrsa -out ca.key 2048

2.生成 CA 签署请求文件

利用密钥创建证书签署请求文件

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

3.生成 CA 证书

将证书签署请求文件,通过ca.key密钥进行签署,生成 ca.crt

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

4.创建网站密钥

创建网站用到的 ca.key 密钥文件

openssl genrsa -out eller.tech.key 2048

5.创建网站签署请求文件

通过网站密钥创建网站证书签署请求文件

openssl req -new -key eller.tech.key -out eller.tech.csr

6.通过CA证书签署生成网站证书

通过自己的CA证书以及CA密钥签署网站证书申请文件,生成最终网站证书

openssl x509 -req -in eller.tech.csr -CA ca.crt -CAkey ca.key  -CAcreateserial -out eller.tech.crt -days 500 -sha256

7.检查网站证书

openssl x509 -in eller.tech.crt -text -noout

二.配置HTTPS

/mnt/cert/xxx 为证书 存放路径,自行更正。

listen       80;
listen       443 ssl;
ssl_certificate /mnt/cert/xxx/server.crt;#你的证书位置
ssl_certificate_key /mnt/cert/xxx/ca.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;

三.强制http跳转https

强制http请求跳转到https上,可以配置两个server,然后进行301跳转。这里通过判断域名的方式,更直接简单。

if ($scheme = 'http') {
	return 301 https://$host$request_uri;
}

四.配置wss(websocket)

给websocket长连接请求增加上tls保护,使其原本的ws变成wss。

这里和http请求配置tls基本一致,需要在其基础上增加http协议头参数,如下:

location /wsapp/ {
    proxy_pass http://wsbackend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
}

如果不增加如上参数,反向代理时原本的websocket请求就当做http请求反馈给后端,导致无法定位到具体资源。从而致使前端收到响应404.

03-11 18:35