TBMQ支持托管Web UI并通过SSL提供REST API调用的HTTP服务器。
大多数TBMQ环境使用负载均衡器作为客户端与broker之间SSL连接的终止点。 换言之,用户浏览器与负载均衡器之间的互联网流量已加密,但负载均衡器与broker服务之间已解密。 此方式的优点是配置简单。 大多数云负载均衡器(AWS、Google Cloud等)具有内置证书生成工具和丰富的SSL配置文档。
尽管如此,仍可将TBMQ配置为启用SSL,避免在Load Balancer上终止SSL。 建议使用受信任CA机构签发的有效SSL证书,避免在自签名证书问题上耗费时间。 以下说明如何为PEM文件格式或Java Keystore存储的证书配置SSL。
使用PEM证书文件配置SSL
通过配置文件、docker-compose或kubernetes脚本设置以下环境变量:
1
2
3
4
5
6
7
...
export SSL_ENABLED=true
export SSL_CREDENTIALS_TYPE=PEM
export SSL_PEM_CERT=server.pem
export SSL_PEM_KEY=server_key.pem
export SSL_PEM_KEY_PASSWORD=secret
...
其中:
- SSL_ENABLED — 启用/禁用SSL支持;
- SSL_CREDENTIALS_TYPE — 服务器凭据类型。PEM — pem证书文件;KEYSTORE — java keystore;
- SSL_PEM_CERT — 服务器证书文件路径。包含服务器证书或证书链,亦可包含服务器私钥;
- SSL_PEM_KEY — 服务器证书私钥文件路径。默认可选。若私钥未包含在服务器证书文件中则为必填;
- SSL_PEM_KEY_PASSWORD — 可选服务器证书私钥密码。
完成配置后,启动或重启TBMQ服务器。
使用Java Keystore配置SSL
通过配置文件、docker-compose或kubernetes脚本设置以下环境变量:
1
2
3
4
5
6
7
8
...
export SSL_ENABLED=true
export SSL_CREDENTIALS_TYPE=KEYSTORE
export SSL_KEY_STORE_TYPE=PKCS12
export SSL_KEY_STORE=keystore.p12
export SSL_KEY_STORE_PASSWORD=tbmq
export SSL_KEY_PASSWORD=tbmq
...
其中:
- SSL_ENABLED — 启用/禁用SSL支持;
- SSL_CREDENTIALS_TYPE — 服务器凭据类型。PEM — pem证书文件;KEYSTORE — java keystore;
- SSL_KEY_STORE_TYPE — 密钥库类型(JKS或PKCS12);
- SSL_KEY_STORE — 存放SSL证书或证书链的密钥库路径,亦可包含服务器私钥;
- SSL_KEY_STORE_PASSWORD — 访问密钥库的密码;
- SSL_KEY_PASSWORD — 访问服务器私钥的密码。
完成配置后,启动或重启TBMQ服务器。
自签名证书生成
以下说明用于生成自有证书文件,适用于测试环境,耗时且不推荐用于生产环境。
注意: 需在已安装openssl的Linux类系统上执行以下步骤。
可选择为服务器创建自签名证书,或按进阶步骤创建CA签名的服务器证书。 两种方式都能实现同一目标:用有效证书保护服务器。
自签名证书PEM文件
这是更简单的方式,由服务器自行生成并签署证书,适用于基础测试或无需证书颁发机构(CA)的小型部署。 生成服务器自签名PEM证书及私钥可使用以下命令:
1
2
openssl ecparam -out server_key.pem -name secp256r1 -genkey
openssl req -new -key server_key.pem -x509 -nodes -days 365 -out server.pem
如不想用密码保护私钥,可加 -nodes(no DES的缩写),否则会要求输入”至少4个字符”的密码。
days 参数(365)可改为任意数字以影响有效期。随后会提示输入”Country Name”等,可直接按Enter使用默认值。
添加 -subj '/CN=localhost' 可跳过证书内容相关提问(将localhost替换为你的域名)。
自签名证书不经第三方校验,除非事先导入浏览器。如需更高安全性,应使用由证书颁发机构(CA)签名的证书。
由证书颁发机构(CA)签名的证书PEM文件
本方法通过创建证书颁发机构(CA)来签署服务器证书,适合需要更高安全性的场景, 尤其是计划管理多张证书或需要专用CA进行签名时。
生成CA私钥:
1
openssl ecparam -out ca_key.pem -name secp256r1 -genkey
生成自签名CA证书:
1
openssl req -new -x509 -key ca_key.pem -days 365 -out ca.pem
将生成有效期为365天的自签名CA证书”ca.pem“。按提示填写证书信息(如Common Name:My Root CA)。
生成服务器私钥:
1
openssl ecparam -out server_key.pem -name secp256r1 -genkey
将生成 EC私钥server_key.pem。
创建证书签名请求(CSR):
1
openssl req -new -key server_key.pem -out server.csr
“server.csr“包含待CA签名的服务器信息。
最后,使用CA签署服务器证书:
1
openssl x509 -req -in server.csr -CA ca.pem -CAkey ca_key.pem -CAcreateserial -out server.pem -days 365
该命令将生成由CA签名的服务器证书”server.pem“。
-req:表示输入为证书签名请求(CSR)。
-CA 与 -CAkey:指定用于签署服务器证书的CA证书“ca.pem”及其私钥“ca_key.pem”。
-CAcreateserial 会自动生成序列号文件”ca.srl“以记录该CA的证书序列号。
签署多张证书时很有用。若不希望生成”ca.srl“,可将 -CAcreateserial 换成 -set_serial <serial_number> 手动指定序列号。
将 PEM 证书和私钥转换为 PKCS12 keystore
确保具备以下文件:
server.pem– 公钥证书(可含链);server_key.pem– 私钥; *(可选)ca.pem– root 或 intermediate CA 证书。
执行以下命令创建 PKCS12 keystore 文件 (keystore.p12):
1
2
3
4
5
6
7
openssl pkcs12 -export \
-in server.pem \
-inkey server_key.pem \
-certfile ca.pem \
-out keystore.p12 \
-name tbmq \
-passout pass:changeit
-certfile ca.pem \行为可选,若有 CA 证书链则包含。将
changeit替换为所需 keystore 密码。该密码会在环境变量中引用。
提示与最佳实践
- 生产环境建议使用 PKCS12 (
.p12) 格式,比 JKS 更具互操作性。 - 导出时确保证书链完整(含 intermediates)。