【trino】trino配置证书https tls/ssl访问

trini版本470

一、官方文档

doc
在Security/TLS and HTTPS、Security/PEM files和Security/JKS files下

openssl文档

二、配置trino

2.1 创建server.cnf文件

[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req[ req_distinguished_name ]
countryName = CN
countryName_default = CN
stateOrProvinceName = BEIJING
stateOrProvinceName_default = BEIJING
localityName = CHAOYANG
localityName_default = CHAOYANG
0.organizationName  = BAIDU
0.organizationName_default  = BAIDU
organizationalUnitName  = IT
organizationalUnitName_default  = IT
commonName = trino
commonName_max  = 64[ v3_req ]
basicConstraints = CA:FALSE
subjectAltName = @alt_names[ alt_names ]
IP.1 = 192.168.100.101
DNS.1 = trino-01.baidu.com

2.2 重点

trino不支持pem文件,虽然文档里注明支持,但实际测试etc目录配置pem,trino无法识别启动后也不会报错,但keytool/jdbc等客户端无法获取正确的证书,获取到的是trino自动生成的证书,报错内容:unable to find valid certification path to requested target,可以通过idea连接jdbc开启-Djavax.net.debug=all获取到
这里我们check subjectAltName即可,其内容应该与server.cnf中配置的alt_names项目一致。此处可以看到完全不一致,另外"subject" : "CN=dev2"也像是自动生成的,subject内容应该就是openssl req -new ... -subj后的内容。
具体报错日志如下

javax.net.ssl|DEBUG|10|main|2025-04-03 18:36:16.771 CST|CertificateMessage.java:1143|Consuming server Certificate handshake message (
"Certificate": {"certificate_request_context": "","certificate_list": [  {"certificate" : {"version"            : "v3","serial number"      : "0195EFD62826","signature algorithm": "SHA256withRSA","issuer"             : "CN=dev2","not before"         : "2025-04-01 08:00:00.000 CST","not  after"         : "2035-04-02 07:59:59.000 CST","subject"            : "CN=dev2","subject public key" : "RSA","extensions"         : [{ObjectId: 2.5.29.35 Criticality=falseAuthorityKeyIdentifier [KeyIdentifier [0000: 49 CB 36 D3 DD 04 A9 EA   30 FD 47 86 79 51 F5 46  I.6.....0.G.yQ.F0010: BD B8 03 CB                                        ....]]},{ObjectId: 2.5.29.19 Criticality=trueBasicConstraints:[CA:truePathLen: no limit]},{ObjectId: 2.5.29.17 Criticality=falseSubjectAlternativeName [DNSName: 192-168-122-1.ipDNSName: 192-168-100-101.ipDNSName: x--1.ipDNSName: 127-0-0-1.ipIPAddress: 192.168.122.1IPAddress: 192.168.100.101IPAddress: 0:0:0:0:0:0:0:1IPAddress: 127.0.0.1]},{ObjectId: 2.5.29.14 Criticality=falseSubjectKeyIdentifier [KeyIdentifier [0000: 49 CB 36 D3 DD 04 A9 EA   30 FD 47 86 79 51 F5 46  I.6.....0.G.yQ.F0010: BD B8 03 CB                                        ....]]}]}"extensions": {<no extension>}},
]
}
)

2.3 具体配置

# 1. 生成自签名根证书
openssl genrsa -out ca.key -passout pass:trino-ts -des3 2048
# -x509: This option outputs a self signed certificate instead of a certificate request
openssl req -x509 -key ca.key -out ca.crt -subj "/C=CN/ST=BEIJING/L=CHAOYANG/O=BAIDU/OU=IT/CN=CA" 
openssl x509 -in ca.crt -text -noout# 2. 生成trino-server keystore内容
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=BEIJING/L=CHAOYANG/O=BAIDU/OU=IT/CN=trino-01.baidu.com" 
openssl x509 -req -days 365 -in server.csr -out server.crt -extfile server.cnf -extensions v3_req -CA ca.crt -CAkey ca.key -CAcreateserial
# 验证所有信息
openssl x509 -in server.crt -text -noout
# 很多信息,当然也包含subjectAltName
# 只验证subjectAltName
openssl x509 -in server.crt -ext subjectAltName -noout
# X509v3 Subject Alternative Name: 
#     IP Address:192.168.100.101, DNS:trino-01.baidu.com
# 验证签名是否ok
openssl verify -CAfile ca.crt server.crt                                                                                               
# server.crt: OK
openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt
# 输入:trino-01
openssl x509 -in server.crt -text -noout
openssl pkcs12 -info -in server.p12 # 需要多次输入:trino-01# 替换原有配置
rm -rf /$TRINO_HOME/etc/server.p12 && cp server.p12 /$TRINO_HOME/etc/# 3. 本地jdk注入自签名ca
# 删除
keytool -delete -storepass changeit -alias trino-ts -keystore /$JAVA_HOME/security/cacerts
# 注入
keytool -import -v -trustcacerts -alias trino-ts -file ca.crt -storepass changeit -keystore /$JAVA_HOME/security/cacerts
# 验证注入结果
keytool -list -storepass changeit -alias trino-ts -keystore /$JAVA_HOME/security/cacerts# 4. 修改config.properties,见下文
# 5. 重启trino server
$TRINO_HOME/bin/launcher restart# 6. 访问web页面
https://trino-01.baidu.com/ui/login.html# 7. 验证trino-server是否使用生产的证书(crt文件)。
# 使用其他服务器或者win获取trino的https证书即crt文件内容。
keytool -printcert -rfc -sslserver trino-01.baidu.com:443 > server-remote.crt
cat server-remote.crt # win命令是:type server-remote.crt
# 注意:此处得到的内容应和server.crt完全一致!!!
openssl x509 -in server-remote.crt -text -ext subjectAltName -noout
openssl verify -CAfile ca.crt server-remote.crt    # server-remote.crt: OK 

修改$TRINO_HOME/etc/config.properties文件

http-server.https.enabled=true
http-server.https.port=443
http-server.https.keystore.path=etc/server.p12
http-server.https.keystore.key=trino-01

2.4 win端配置jdk(可选dbeaver会用到)

修改win的jdk注入,自签名ca。

# win jdk
keytool -delete -storepass changeit -alias trino-ts -keystore %JAVA_HOME%\lib\security\cacerts
keytool -import -v -trustcacerts -alias trino-ts -file ca.crt -storepass changeit -keystore  %JAVA_HOME%\lib\security\cacerts

三、jdbc验证

java/kotlin jdbc验证,此处使用kotlin语言:
TLS/SSL的debug日志需要在VM options处添加-Djavax.net.debug=all
通过tls/ssl需要使用如下方法(1)-(4)中的任意一种。
使用gradle构建项目,build.gradle内容:

plugins {  id 'org.jetbrains.kotlin.jvm' version '1.9.23'  
}  group = 'com.ls'  
version = '1.0-SNAPSHOT'  repositories {  maven { url "https://maven.aliyun.com/repository/public" }  maven { url "https://maven.aliyun.com/repository/gradle-plugin" }  maven { url "https://maven.aliyun.com/repository/central" }  maven { url "https://maven.aliyun.com/repository/jcenter" }  maven { url "https://maven.aliyun.com/repository/google" }  maven { url "https://maven.aliyun.com/repository" }  google()  mavenCentral()  maven { url 'https://jitpack.io' }  
}  dependencies {  testImplementation 'org.jetbrains.kotlin:kotlin-test'  testImplementation("io.trino:trino-jdbc:470")  
}  test {  useJUnitPlatform()  
}  
kotlin {  jvmToolchain(21)  
}

import org.junit.jupiter.api.Test  
import java.sql.DriverManager  
import java.util.Properties  class TrinoJdbcTest {  @Test  fun fistHead() {  println("hello")  }  @Test  fun tsHost() {  val user = "myuser"  val password = "your_password"  val url = "jdbc:trino://trino-01.baidu.com:443/hive"  runShowCatalog(url,user, password)  }  @Test  fun tsIp() {  val user = "myuser"  val password = "your_password"  val url = "jdbc:trino://192.168.100.101:443/hive"  runShowCatalog(url,user, password)  }  fun runShowCatalog(url:String,user: String, password: String) {  val props = Properties()  props.put("user", user)  props.put("password", password)  props.put("SSL", "true")  // (1) no Verification  
//         props.put("SSLVerification","NONE") // must set SSL as true!  // (2) from Self Verificated CA         props.put("SSLTrustStorePath", "D:\\certs\\ca.crt")  // (3) from jvm CA,which is injected with Self Verificated CA  // keytool -import -v -trustcacerts -alias trino-ts -file D:\certs\ca.crt -storepass changeit -keystore %JAVA_HOME%\lib\security\cacerts        // must provide the password for jvm and it defualt is "changeit"// props.put("SSLTrustStorePath","%JAVA_HOME%\\lib\\security\\cacerts")  // props.put("SSLTrustStorePassword","changeit")  // 可选:optional client key store,client秘钥和证书的生成方式和sever的全称一致。        // openssl pkcs12 -export -out workspace-client.p12 -inkey workspace-client.key -in workspace-client.crt -passout pass:trino-client             // props.put("SSLKeyStorePath","D:\\projects\\trino-jdbc-test\\src\\test\\resources\\workspace-client.pem") // failed        // props.put("SSLKeyStorePath","D:\\certs\\client.pem")        、// props.put("SSLKeyStorePassword","trino-client")        // maybe use SSLUseSystemKeyStore        // props.put("SSLUseSystemTrustStore","true")  Class.forName("io.trino.jdbc.TrinoDriver")  val conn = DriverManager.getConnection(url, props)  val stmt = conn.createStatement()  val query = stmt.executeQuery("show catalogs")  while (query.next()) {  val db = query.getString(1)  println(db)  }  }  }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/900020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ZCC8702,LED驱动芯片的“六边形战士”可替代SY8707

在LED照明的璀璨舞台上&#xff0c;驱动芯片犹如幕后英雄&#xff0c;默默掌控着灯光的闪耀与变幻。ZCC8702作为一款集大成的LED驱动芯片&#xff0c;凭借其卓越的性能、广泛的应用范围和出色的稳定性&#xff0c;成为了这个领域中当之无愧的“六边形战士”。今天&#xff0c;就…

Vue 数据传递流程图指南

今天&#xff0c;我们探讨一下 Vue 中的组件传值问题。这不仅是我们在日常开发中经常遇到的核心问题&#xff0c;也是面试过程中经常被问到的重要知识点。无论你是初学者还是有一定经验的开发者&#xff0c;掌握这些传值方式都将帮助你更高效地构建和维护 Vue 应用 目录 1. 父…

Git Restore 命令详解与实用示例

文章目录 Git Restore 命令详解与实用示例1. 恢复工作区文件到最后一次提交的状态基本命令示例恢复所有更改 2. 恢复某个文件到特定提交的状态基本命令示例 3. 恢复暂存区的文件基本命令示例恢复所有暂存的文件 git restore 的常见选项git restore 与 git checkout 比较总结 Gi…

AI 防口误指南_LLM 输出安全实践

在数字化转型的浪潮中&#xff0c;大语言模型(以下统称LLM)已成为企业技术栈中不可或缺的智能组件&#xff0c;这种强大的AI技术同时也带来了前所未有的安全挑战。它输出的内容如同双面刃&#xff0c;一面闪耀着效率与创新的光芒&#xff0c;另一面却隐藏着"幻觉"与不…

程序化广告行业(55/89):DMP与DSP对接及数据统计原理剖析

程序化广告行业&#xff08;55/89&#xff09;&#xff1a;DMP与DSP对接及数据统计原理剖析 大家好呀&#xff01;在数字化营销的大趋势下&#xff0c;程序化广告已经成为众多企业实现精准营销的关键手段。上一篇博客我们一起学习了程序化广告中的人群标签和Look Alike原理等知…

运维之 Centos7 防火墙(CentOS 7 Firewall for Operations and Maintenance)

运维之 Centos7 防火墙 1.介绍 Linux CentOS 7 防火墙/端口设置&#xff1a; 基础概念&#xff1a; 防火墙是一种网络安全设备&#xff0c;用于监控和控制网络流量&#xff0c;以保护计算机系统免受未经授权的访问和恶意攻击。Linux CentOS 7操作系统自带了一个名为iptables的…

第十五届蓝桥杯大赛软件赛省赛Python 大学 C 组题目试做(下)【本期题目:砍柴,回文字符串】

okk&#xff0c;大伙&#xff0c;这一期我们就把C组的题目刷完。 本期题目&#xff1a;砍柴&#xff0c;回文字符串 文章目录 砍柴题目思路分析举个栗子思路总结 代码 回文字符串题目思路分析代码 感谢大伙观看&#xff0c;别忘了三连支持一下大家也可以关注一下我的其它专栏&a…

Design Compiler:库特征分析(ALIB)

相关阅读 Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482 简介 在使用Design Compiler时&#xff0c;可以对目标逻辑库进行特征分析&#xff0c;并创建一个称为ALIB的伪库&#xff08;可以被认为是缓存&#xff09;&…

MySQL索引原理:从B+树手绘到EXPLAIN

最近在学后端&#xff0c;学到了这里做个记录 一、为什么索引像书的目录&#xff1f; 类比&#xff1a;500页的技术书籍 vs 10页的目录缺点&#xff1a;全表扫描就像逐页翻找内容优点&#xff1a;索引将查询速度从O(n)提升到O(log n) 二、B树手绘课堂 1. 结构解剖&#xff0…

全连接RNN反向传播梯度计算

全连接RNN反向传播梯度计算 RNN数学表达式BPTT(随时间的反向传播算法)参数关系网络图L对V的梯度L对U的梯度L对W和b的梯度 RNN数学表达式 BPTT(随时间的反向传播算法) 参数关系网络图 L对V的梯度 L对U的梯度 L对W和b的梯度

C++高效读取大规模文本格式点云(windows)

需使用VS2017及以上版本&#xff0c;C语言标准选择C17&#xff0c;支持OpenMP。 执行效率明显优于ifstream stof。 // 点云数据结构 struct PointXYZ {std::array<float, 3> coord; };float string_to_float_fast(const std::string& str) {float value;auto [p…

【Linux】进程信号的捕捉处理

个人主页~ 进程信号的捕捉处理 一、信号捕捉处理的概述1、信号捕捉处理全过程2、用户态和内核态的区别&#xff08;一&#xff09;用户态&#xff08;二&#xff09;内核态&#xff08;三&#xff09;用户态与内核态的切换&#xff08;四&#xff09;硬件条件 二、再谈进程地址…

Nyquist内置函数-概述

1 Nyquist内置函数-概述 本章提供奈奎斯特&#xff08;Nyquist&#xff09;语言参考。操作按功能和抽象级别分类。奈奎斯特在两个重要级别上实现&#xff1a;“高级”级别支持行为抽象&#xff0c;这意味着像 stretch 和 at 这样的操作可以应用。这些函数是典型用户期望使用的…

数据驱动防灾:AI 大模型在地质灾害应急决策中的关键作用。基于DeepSeek/ChatGPT的AI智能体开发

全球气候变化加剧了滑坡、泥石流等地质灾害的发生频率与不确定性&#xff0c;传统基于统计与物理模型的预测方法常受限于‌数据稀疏性‌与‌动态耦合复杂性‌。近年来&#xff0c;AI智能体&#xff08;AI Agents&#xff09;与大型语言模型&#xff08;LLMs&#xff09;的突破为…

光谱相机在工业中的应用

光谱相机&#xff08;多光谱、高光谱、超光谱成像技术&#xff09;在工业领域通过捕捉物质的光谱特征&#xff08;反射、透射、辐射等&#xff09;&#xff0c;结合化学计量学与人工智能算法&#xff0c;为工业检测、质量控制和工艺优化提供高精度、非接触式的解决方案。以下是…

Dify工作流中如何去除deepseek-r1思考内容

在工作流中deepseek-r1的think标签内部的内容&#xff0c;很容易让工作流其他的llm产生幻觉&#xff0c;导致不能良好的生成目标效果。 我们通过代码的方式让deepseek-r1既有think思考链的效果&#xff0c;又不传递思考链。 工作流的逻辑为上图 去除think中的代码为 import re…

容器的CPU

1、限制进程的CPU 通过Cgroup来限制进程资源的使用&#xff0c;CPU Cgroup 是 Cgroups 其中的一个 Cgroups 子系统&#xff0c;它是用来限制进程的 CPU 使用的。 cpu.cfs_period_us&#xff0c;它是 CFS 算法的一个调度周期&#xff0c;一般它的值是 100000&#xff0c;以 mic…

【系统分析师-第二篇】

学习目标 通过参加考试&#xff0c;训练学习能力&#xff0c;而非单纯以拿证为目的。 1.在复习过程中&#xff0c;训练快速阅读能力、掌握三遍读书法、运用番茄工作法。 2.从底层逻辑角度理解知识点&#xff0c;避免死记硬背。 3.通过考试验证学习效果。 学习方法 第二遍快速…

【再探图论】深入理解图论经典算法

一、bellman_ford 1. 是什么松弛 在《算法四》中&#xff0c;对松弛的解释是&#xff1a;relax the edge&#xff0c;看起来比较抽象&#xff0c;不过如果我们从生活中的实例去理解&#xff0c;就简单多了&#xff1a; 试想一根绳索&#xff0c;当你握着绳索的两头使劲用力拉…

基于pycharm的YOLOv11模型训练方法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、前期准备1.1 软件环境配置1.2 训练集参考 二、训练步骤2.1 打开文件夹2.2 打开文件2.3 data.yaml最终代码 三、train.py四、最终结果五、detect.py六、 拓展…