【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.pswp.cn/news/900020.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900020.shtml
英文地址,請注明出處:http://en.pswp.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六、 拓展…