TT Bigdata TT Bigdata
首页
  • 部署专题

    • 常规安装
    • 一键部署
  • 组件专题

    • 安装指导
    • 开启 Kerberos
    • 魔改分享
  • 版本专题

    • 更新说明
    • BUG临时处理
  • 实验室

    • VIEW插件
    • JIRA速查
  • Ambari-Env

    • 环境准备
    • 开始使用
  • 组件编译

    • 专区—Ambari
    • 专区—Bigtop-官方组件
    • 专区—Bigtop-扩展组件
  • 报错解决

    • 专区—Ambari
    • 专区—Bigtop
  • 其他技巧

    • APT仓库增量更新
    • Maven镜像加速
    • Gradle镜像加速
    • Bower镜像加速
    • 虚拟环境思路
    • R环境安装+一键安装脚本
    • Ivy配置私有镜像仓库
    • Node.js 多版本共存方案
    • Ambari Web本地启动
    • Npm镜像加速
    • PostgreSQL快速安装
    • Temurin JDK 23快速安装
  • 成神之路

    • 专区—Ambari
    • 专区—Ambari-Metrics
    • 专区—Bigtop
  • 集成案例

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 核心代码

    • 各组件代码
    • 通用代码模板
  • 国产化&其他系统

    • Kylin V10系列
    • Rocky系列
    • Ubuntu系列
  • Grafana监控方案

    • Ambari-Metrics插件
    • Infinity插件
  • 支持&共建

    • 蓝图愿景
    • 合作共建
登陆
GitHub (opens new window)

JaneTTR

数据酿造智慧,每一滴都是沉淀!
首页
  • 部署专题

    • 常规安装
    • 一键部署
  • 组件专题

    • 安装指导
    • 开启 Kerberos
    • 魔改分享
  • 版本专题

    • 更新说明
    • BUG临时处理
  • 实验室

    • VIEW插件
    • JIRA速查
  • Ambari-Env

    • 环境准备
    • 开始使用
  • 组件编译

    • 专区—Ambari
    • 专区—Bigtop-官方组件
    • 专区—Bigtop-扩展组件
  • 报错解决

    • 专区—Ambari
    • 专区—Bigtop
  • 其他技巧

    • APT仓库增量更新
    • Maven镜像加速
    • Gradle镜像加速
    • Bower镜像加速
    • 虚拟环境思路
    • R环境安装+一键安装脚本
    • Ivy配置私有镜像仓库
    • Node.js 多版本共存方案
    • Ambari Web本地启动
    • Npm镜像加速
    • PostgreSQL快速安装
    • Temurin JDK 23快速安装
  • 成神之路

    • 专区—Ambari
    • 专区—Ambari-Metrics
    • 专区—Bigtop
  • 集成案例

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 核心代码

    • 各组件代码
    • 通用代码模板
  • 国产化&其他系统

    • Kylin V10系列
    • Rocky系列
    • Ubuntu系列
  • Grafana监控方案

    • Ambari-Metrics插件
    • Infinity插件
  • 支持&共建

    • 蓝图愿景
    • 合作共建
登陆
GitHub (opens new window)
  • 【开启】Kerberos认证

  • 【关闭】Kerberos认证

  • 其他优化技巧

  • 踩坑合集

    • Test Kerberos Client报错:Failed to kinit
    • KERBEROS SERVICE CHECK 报错
    • Ambari开启Kerberos认证加密类型错误
    • [开启Kerberos]-Solr启动失败处理
    • [开启Kerberos]-Kafka启动失败处理
    • [开启Kerberos]-Atlas启动-Hbase权限异常
    • [开启Kerberos]-Atlas启动-Solr权限异常
    • [开启Kerberos]-Atlas启动-Kafka权限异常
    • [开启Kerberos]-Hive服务检查异常处理
    • [开启Kerberos]-Trino启动-配置文件处理
    • [开启Kerberos]-Trino启动-缺失PEM证书处理
      • 一、Trino 启动失败的现象
        • 1、核心报错堆栈
      • 二、Trino 为何需要 PEM?
      • 三、解决方案:生成 PEM 文件
        • 1、生成 key + crt
        • 2、合并生成 PEM
        • 3、设置权限与用户组
      • 四、生成后的文件验证
      • 五、重启 Ambari 中的 Trino 服务
    • [开启Kerberos]-Trino启动-连接Hive失败
    • [关闭 Kerberos]-Kafka 注销异常
    • [关闭 Kerberos]-Hive 注销异常
    • Kerberos 客户端模板渲染异常处理
    • Kafka 启动兼容 Kerberos 源码级修改
    • Kerberos 客户端模板渲染异常处理
  • 其他技巧

  • 组件安装-Kerberos
  • 踩坑合集
JaneTTR
2025-11-17
目录

[开启Kerberos]-Trino启动-缺失PEM证书处理

证书缺失

我们在启用 Kerberos 的环境中启动 Trino 时,Trino 会主动加载 SSL 所需的 PEM 证书。如果 trino.pem 缺失,就会导致启动过程直接报错并退出。

# 一、Trino 启动失败的现象

Trino 在启动过程中会检查:

  • /etc/trino/conf/trino.pem
  • /etc/trino/conf/trino.key
  • /etc/trino/conf/trino.crt

当 PEM 不存在时,会直接触发如下异常:

image-20251111093911131

# 1、核心报错堆栈

1) [Guice/ErrorInCustomProvider]: IllegalArgumentException: Error loading PEM key store: /etc/trino/conf/trino.pem
  while locating HttpServerProvider
  at java.base/DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
  while locating HttpServer

Learn more:
  https://github.com/google/guice/wiki/ERROR_IN_CUSTOM_PROVIDER
Caused by: IllegalArgumentException: Error loading PEM key store: /etc/trino/conf/trino.pem
	at ReloadableSslContextFactoryProvider.loadKeyStore(ReloadableSslContextFactoryProvider.java:208)
	at ReloadableSslContextFactoryProvider.loadContextFactory(ReloadableSslContextFactoryProvider.java:108)
	at ReloadableSslContextFactoryProvider.<init>(ReloadableSslContextFactoryProvider.java:100)
	at HttpServer.createReloadingSslContextFactory(HttpServer.java:495)
	at HttpServer.lambda$new$1(HttpServer.java:246)
	at java.base/Optional.orElseGet(Optional.java:364)
	at HttpServer.<init>(HttpServer.java:246)
	at HttpServerProvider.get(HttpServerProvider.java:110)
	at HttpServerProvider.get(HttpServerProvider.java:41)
	at ProviderInternalFactory.provision(ProviderInternalFactory.java:86)
	at BoundProviderFactory.provision(BoundProviderFactory.java:72)
	at ProviderInternalFactory$1.call(ProviderInternalFactory.java:67)
	at ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:109)
	at LifeCycleModule.provision(LifeCycleModule.java:53)
	at ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:117)
	at ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:66)
	at ProviderInternalFactory.circularGet(ProviderInternalFactory.java:62)
	at BoundProviderFactory.get(BoundProviderFactory.java:59)
	at ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
	at SingletonScope$1.get(SingletonScope.java:169)
	at InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:45)
	at InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:213)
	at InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:186)
	at InternalInjectorCreator.build(InternalInjectorCreator.java:113)
	at Guice.createInjector(Guice.java:87)
	at Bootstrap.initialize(Bootstrap.java:335)
	at Server.doStart(Server.java:136)
	at Server.lambda$start$0(Server.java:90)
	at io.trino.$gen.Trino_____20251111_012044_1.run(Unknown Source)
	at Server.start(Server.java:90)
	at TrinoServer.main(TrinoServer.java:37)
Caused by: FileNotFoundException: /etc/trino/conf/trino.pem (No such file or directory)
	at java.base/FileInputStream.open0(Native Method)
	at java.base/FileInputStream.open(FileInputStream.java:219)
	at java.base/FileInputStream.<init>(FileInputStream.java:159)
	at Files$FileByteSource.openStream(Files.java:134)
	at Files$FileByteSource.read(Files.java:158)
	at ByteSource$AsCharSource.read(ByteSource.java:487)
	at PemReader.isPem(PemReader.java:103)
	at ReloadableSslContextFactoryProvider.loadKeyStore(ReloadableSslContextFactoryProvider.java:202)
	... 30 more

2) [Guice/ErrorInCustomProvider]: IllegalArgumentException: Error loading PEM key store: /etc/trino/conf/trino.pem
  while locating HttpServerProvider
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

关键点

Trino 自身并不会自动生成 PEM,因此只要文件缺失,就会在 HttpServerProvider 初始化阶段直接失败。

# 二、Trino 为何需要 PEM?

Trino 在启用 Kerberos 后,默认仍会使用 HTTPS 通道暴露 Web / REST 接口,Ambari 也通过这个通道进行健康检查。

因此 Trino 必须加载:

  • 私钥:trino.key
  • 证书:trino.crt
  • PEM 合并文件:trino.pem

PEM 是什么?

PEM = CRT(公钥证书) + KEY(私钥),Trino 用它进行 TLS 握手。

# 三、解决方案:生成 PEM 文件

如果你有第三方签发的证书,可以直接使用;若没有,可以本地生成一份自签名证书,用于通过 Ambari 启动检查。

这里以实验验证为目的,在 Trino 主机执行:

# 1、生成 key + crt

sudo openssl req -newkey rsa:2048 -nodes \
-keyout /etc/trino/conf/trino.key \
-x509 -days 365 \
-out /etc/trino/conf/trino.crt \
-subj "/CN=$(hostname -f)"
1
2
3
4
5

# 2、合并生成 PEM

sudo cat /etc/trino/conf/trino.crt /etc/trino/conf/trino.key > /etc/trino/conf/trino.pem
1

# 3、设置权限与用户组

sudo chown trino:hadoop /etc/trino/conf/trino.pem
sudo chmod 640 /etc/trino/conf/trino.pem
1
2

权限说明

  • Trino 进程用户必须能读取 PEM
  • 避免将权限设置为 777,会触发安全警告

# 四、生成后的文件验证

执行上述操作后,我们在 Trino 主机观察到:

image-20251111100305955

trino.key / trino.crt / trino.pem 均已生成并位于正确目录:

image-20251111100328105

# 五、重启 Ambari 中的 Trino 服务

处理完证书后,返回 Ambari 页面重新启动 Trino,即可正常通过检查。

image-20251111100530091

说明

即便仅用于内部通信,自签名证书足以通过服务检查。 如果要接入企业公钥体系,再替换为正式证书即可。

#Ambari#Kerberos#Trino#TLS#密钥管理#PEM#ServiceCheck#SSL验证
[开启Kerberos]-Trino启动-配置文件处理
[开启Kerberos]-Trino启动-连接Hive失败

← [开启Kerberos]-Trino启动-配置文件处理 [开启Kerberos]-Trino启动-连接Hive失败→

最近更新
01
[开启Kerberos]-Trino启动-配置文件处理
11-18
02
Livy 安装 2.2.0+
11-17
03
[关闭 Kerberos]-Hive 注销异常
11-17
更多文章>
Theme by Vdoing | Copyright © 2017-2025 JaneTTR | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式