SUSE Linux多租户SAP HANA租户库SSL连接错误:主体名称不符
解决SUSE Linux多租户SAP HANA租户数据库SSL连接错误:Cannot create SSL Engine: The target principle name is incorrect
我之前处理过好几起类似的多租户HANA SSL连接问题,结合你的描述,这个报错的核心原因确实是系统数据库与租户数据库的SSL证书主体名不匹配,下面给你拆解根源和具体的解决步骤:
问题根源解析
你提到服务器证书是在系统数据库上创建的,而租户数据库默认会继承系统库的SSL相关配置——但这里的关键是:系统库生成的证书,其主体名(Principal Name)是对应系统库的服务标识(比如hdb@<系统库主机名>或者特定的CN字段),当客户端尝试连接租户库时,会验证租户库的服务主体名,但证书里的主体名和租户的不匹配,就触发了SSL握手的“目标主体名不正确”错误。
具体解决步骤
1. 先确认当前的SSL配置和证书主体名
- 登录系统数据库,执行SQL查询租户的SSL配置:
查看返回的SELECT * FROM SYS.M_SSL_CONFIGURATION WHERE DATABASE_NAME = '<你的租户库名>';SSL_CERTIFICATE和SSL_KEY路径,确认是不是指向系统库的证书文件。 - 在SUSE服务器上,用openssl命令查看证书的主体名:
输出的openssl x509 -in /usr/sap/<SID>/HDB<实例号>/cert/server.crt -noout -subjectCN=字段就是证书的主体名,对比租户库的服务名(通常是hdb@<租户库主机名>或者你的客户端连接时指定的主机名),就能确认不匹配的问题。
2. 为租户数据库生成独立的SSL证书
你有两个选项:
- 选项A:生成包含租户主体名的新证书
登录HANA系统库,用CREATE CERTIFICATE命令为租户生成专属证书,指定正确的主体名:CREATE CERTIFICATE FOR '<租户库名>' SUBJECT 'CN=<租户库主机名>, OU=SAP, O=YourCompany, C=CN' VALID UNTIL '2030-12-31' STORE IN FILE '/usr/sap/<SID>/HDB<实例号>/cert/tenant_<租户库名>.crt' KEY STORE IN FILE '/usr/sap/<SID>/HDB<实例号>/cert/tenant_<租户库名>.key'; - 选项B:修改现有证书为通配符或SAN扩展
如果你的多租户共享同一个主机名,可以重新生成系统库证书,加入通配符CN(比如CN=*.yourdomain.com)或者SAN扩展包含所有租户的服务名,这样所有租户都能复用这个证书。
3. 更新租户数据库的SSL配置
执行ALTER SYSTEM命令,让租户使用新的证书:
ALTER SYSTEM ALTER CONFIGURATION ('indexserver.ini', 'database', '<租户库名>') SET ('ssl', 'ssl_certificate') = '/usr/sap/<SID>/HDB<实例号>/cert/tenant_<租户库名>.crt' WITH RECONFIGURE; ALTER SYSTEM ALTER CONFIGURATION ('indexserver.ini', 'database', '<租户库名>') SET ('ssl', 'ssl_key') = '/usr/sap/<SID>/HDB<实例号>/cert/tenant_<租户库名>.key' WITH RECONFIGURE;
4. 重启租户服务并测试连接
- 在SUSE上用sapcontrol命令重启租户:
sapcontrol -nr <实例号> -function StopService <租户库名> sapcontrol -nr <实例号> -function StartService <租户库名> - 然后用HANA Studio或者hdbsql命令测试SSL连接:
hdbsql -n <主机名>:<租户端口> -u <用户名> -p <密码> -ssl
额外注意事项
- 确保证书文件的权限正确:HANA的sid用户(比如
adm<SID>)需要有证书和密钥文件的读取权限,可执行:chown <sid>adm:sapsys /usr/sap/<SID>/HDB<实例号>/cert/tenant_<租户库名>.* chmod 600 /usr/sap/<SID>/HDB<实例号>/cert/tenant_<租户库名>.key - 如果客户端使用了信任库,需要把新的租户证书导入到客户端的信任存储中,避免出现证书不被信任的错误。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

