1.概述
trino默认的jdbc,cli及web ui等客户端均封装的是http协议,且无法使用密码,即非安全链接,如下图所示:
如果这个时候传输密码到服务端,会抛出Authentication over HTTP is not enabled 异常,当然也可以修改源码支持http+密码的方式访问trino,但是稍微复杂一些,服务端和客户端都需要改造,如果是外接的系统比如BI就比较麻烦。在不修改源码的情况下,如果想要使用用户名+密码的方式访问trino, 那就必须启用https。
非安全链接配置比较简单可参考trino官网,下面我们探讨一下trino https链接
2.https 链接
trino支持三种方式的https链接,分别是:通过代理服务https访问trino, 基于私有证书的https,基于通用证书的https
2.1通过代理服务https访问trino
这是官方最推荐的方式,只需要在coordinator config.properties加如下配置:
http-server.process-forwarded=true
然后即可通过前端的负载均衡或者代理服务访问后端的trino coordinator, 这个时候trino coordinator不需要配置https,还是默认的http配置,只需要前端的代理https是基于通用证书即可,客户端访问代理的https接口将信息转发到后端的trino server,如下图所示:
2.2 基于私有证书的https
一般生产环境也会使用这种方式,需要自己生成证书
1.生成证书:
keytool -genkeypair -validity 36500 -ext SAN=IP:${trino_server_ip} -alias trino -keypass ${password} -storepass ${password} -keyalg RSA -dname CN=${trino_server_ip},OU=,O=,L=,ST=,C= -keystore trino.jks
keytool -export -rfc -keystore trino.jks --alias trino -file trino.pem
2.trino服务端配置:
http-server.https.enabled=true
http-server.https.port=8443
http-server.https.keystore.path=etc/trino.jks
http-server.https.keystore.key=${password}
http-server.authentication.type=password
http-server.https.port=8443
http-server.https.keystore.path=etc/trino.jks
http-server.https.keystore.key=${password}
http-server.authentication.type=password
默认开启https后,还需要配置trino集群内部的安全通信密钥,所以我重新优化了这个功能,这样集群内部节点之间使用http方式通信即可,无需配置密钥。
3.生成密码文件(也可使用LDAP)
touch password.db
htpasswd -B -C 10 password.db trino
然后输入密码即可
4.客户端配置,以cli为例
trino-cli-406-executable.jar --server https://{trino_coordinator_ip}:8443 --catalog hive --truststore-path trino.pem --user trino --password
需要在客户端指定证书位置,同理jdbc方式也需要指定证书
这种方式的弊端就是如果客户端是第三方工具就很麻烦,一般需要对第三方工具进行改造从而才能读到我们提供的证书。
2.3 基于通用证书的https
需要申请通用证书,trino使用通用证书的配置方法和2.2一样,但是通用证书一般有时间期限,超时需要重新申请,通用证书支持所有形式的客户端和浏览器的https连接,无需对客户端做额外配置,也是官方比较推荐的。
申请链接:
https://www.sslforfree.com/