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

sefsd

一.生成自签证书 若是有购买证书的,可忽略此步骤。前端

生成方法一:web

openssl genrsa -des3 -out ca.key 1024
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密钥 建立密钥
openssl genrsa -des3 -out ca.key 1024

2.利用CA密钥自签署CA证书后端

openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

3.生成(eg服务器端的)私钥(key文件)服务器

openssl genrsa -des3 -out server.key 1024

4.用server.key生成一个证书websocket

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

5.用CA的证书为生成的server.csr文件签名session

openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key

6.证书撤销 不须要吊销证书的,可没必要执行此步骤。app

openssl ca -keyfile ca.key -cert ca.crt -revoke server.crt

这时数据库被更新证书被标记上撤销的标志,须要生成新的证书撤销列表:socket

openssl ca -gencrl -keyfile ca.key -cert ca.crt -out test.crl

查看证书撤销列表:代理

openssl crl -noout -text -in crl/test.crl

二.配置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.

相关文章
相关标签/搜索