配置Apache Pulsar OpenID Connect认证时证书验证失败求助
Apache Pulsar OpenID Connect 认证证书错误排查与解决
问题描述
配置Pulsar 3.0.x版本的OpenID Connect认证时,持续遇到证书相关错误:
- 依赖JVM信任库(已将证书导入
jre/lib/security/cacerts),留空openIDTokenIssuerTrustCertsFilePath配置项,触发错误:
Caused by: java.lang.IllegalArgumentException: File does not contain valid certificates: .... Caused by: java.security.cert.CertificateException: could not find certificate file: at io.netty.handler.ssl.PemReader.readCertificates(PemReader.java:68) ~[io.netty-netty-handler-4.1.89.Final.jar:4.1.89.Final]
- 指定PEM文件路径
openIDTokenIssuerTrustCertsFilePath=/opt/pulsar/certificates/certificate.pem,触发错误:
Caused by: java.security.cert.CertificateException: found no certificates in input stream
当前broker.conf关键配置:
authenticationProviders=org.apache.pulsar.broker.authentication.oidc.AuthenticationProviderOpenID openIDAllowedTokenIssuers=https://login-stg.somewebsite.com/ openIDAllowedAudiences=https://auth0-some-website.com/maas, https://some-stg.some-dev.auth0.com/userinfo openIDTokenIssuerTrustCertsFilePath= openIDRoleClaim=https://some-web.com/role
原因分析
- 空配置项逻辑异常:
AuthenticationProviderOpenID对空值的openIDTokenIssuerTrustCertsFilePath处理逻辑存在问题,未正确触发"使用JVM默认信任库"的分支,反而尝试读取空路径对应的文件。 - PEM文件有效性问题:指定的PEM文件不符合要求,可能是编码格式错误(如为DER格式而非PEM)、无有效证书内容,或证书链不完整。
解决步骤
方案1:正确使用JVM信任库
若依赖JVM信任库,不要留空配置项,直接移除openIDTokenIssuerTrustCertsFilePath,让Pulsar自动加载JVM默认信任库。
修改后的broker.conf相关配置:
authenticationProviders=org.apache.pulsar.broker.authentication.oidc.AuthenticationProviderOpenID openIDAllowedTokenIssuers=https://login-stg.somewebsite.com/ openIDAllowedAudiences=https://auth0-some-website.com/maas, https://some-stg.some-dev.auth0.com/userinfo openIDRoleClaim=https://some-web.com/role
同时确认证书已正确导入JVM信任库:
- 执行导入命令(默认密码为
changeit):
keytool -importcert -file /path/to/your/certificate.crt -alias oidc-issuer -keystore $JAVA_HOME/jre/lib/security/cacerts
- 重启Pulsar Broker,确保信任库变更生效。
方案2:修复PEM文件配置
若必须指定PEM文件路径,需确保文件满足以下要求:
- 格式合规:文件内容以
-----BEGIN CERTIFICATE-----开头,-----END CERTIFICATE-----结尾,中间为Base64编码的证书内容;若为证书链,需将根证书、中间证书、服务器证书按顺序放入同一文件。 - 有效性验证:通过以下命令确认文件有效:
openssl x509 -in /opt/pulsar/certificates/certificate.pem -text -noout
能正常输出证书信息则说明文件有效。
3. 权限配置:确保Pulsar进程对文件有读取权限:
chown pulsar:pulsar /opt/pulsar/certificates/certificate.pem chmod 644 /opt/pulsar/certificates/certificate.pem
- 修正
broker.conf中的路径配置,重启Broker。
额外排查点
- 确认Pulsar进程使用的JVM与导入证书的JVM一致:通过
ps aux | grep pulsar查看进程的JAVA_HOME路径,避免跨JVM导致信任库不生效。 - 若使用自签名证书,需导入颁发者的根证书而非服务器证书。
内容的提问来源于stack exchange,提问作者raah
相关产品推荐
相关产品推荐

