首页 > 解决方案 > Apache Zeppelin websockets 是否经过身份验证?

问题描述

按照这里的指导...

https://zeppelin.apache.org/docs/0.8.2/setup/security/authentication_nginx.html

我使用 nginx.conf(几乎)逐字逐句在 Nginx 代理后面部署 Zeppelin,以通过 nginx 作为我内部未受保护的 Zeppelin 实例的代理通过 https 实现基本身份验证。我的意图是通过使用 https 到 nginx 来实现机密性,并且上游内部通信未加密——假设所有外部通信都经过加密和身份验证。我从这个 Zeppelin 站点的印象是,他们在这里的指导通过合理但保守的现代安全标准来实现。

我担心 nginx 身份验证代理无法为 websocket 端点实现它对 https 端点的作用。我的问题(主要针对 Zepp 贡献者)是,这是否建议 Nginx 身份验证和 https 配置可以保护 websocket 通道免遭未经授权的使用?Zeppelin 服务器是否通过 /ws uri 连接到它的客户端进行身份验证?

通过启用 Zepellin 内部的身份验证系统,此处的链接 #2 听起来像 websockets /can/ 是“安全的”。然而,这似乎与 Zeppelin 团队在第一个链接中提出的更好的建议背道而驰,他们建议将身份验证和 Zeppelin 问题分开。

https://zeppelin.apache.org/docs/0.6.2/security/shiroauthentication.html

那么,Zeppelin 是否可以通过使用 Nginx 的 https 设置在基本身份验证之后得到强化(与基本身份验证一样难)?换句话说,Zeppelin 是否会在 ed 中验证 websocket 客户端,或者是否可以欺骗 nginx 验证的 Zeppelin 前端,从而可以在 nginx 不需要密码的情况下建立 websocket 连接?如何更改此 nginx.conf 以实现非 https、非 wss Zeppelin 上游服务器的安全 nginx 代理?

upstream zeppelin {
    server 192.168.1.200:38080;
}

server {
    listen 443 ssl;
    server_name mysite.com;

    ssl_certificate /etc/nginx/key/nginx_20191222.crt;
    ssl_certificate_key /etc/nginx/key/nginx_20191222.key;
    ssl_protocols   TLSv1.2;
    ssl_ciphers     HIGH:!aNULL:!MD5;

    location / {
        proxy_pass http://zeppelin;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_redirect off;

        auth_basic        "Private site";
        auth_basic_user_file  conf.d/passwd;
    }

    location /ws {  
        proxy_pass http://zeppelin;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;    #websocket;
        proxy_set_header Connection upgrade;
        proxy_read_timeout 86400;
    }
}

标签: nginxwebsocketapache-zeppelin

解决方案


推荐阅读