默认情况下,Apache Pulsar客户端以纯文本与Apache Pulsar服务通信。可以通过配置TLS传输加密,开启TLS要影响传输性能。
以下是具体配置Pulsar TLS操作和注意事项。(Pulsar 2.4.2版本测试通过)
一 创建根证书CA
/data目录下
$ mkdir my-ca
$ cd my-ca
$ wget --no-check-certificate https://raw.githubusercontent.com/apache/pulsar/master/site2/website/static/examples/openssl.cnf
$ export CA_HOME=$(pwd)
$ mkdir certs crl newcerts private
$ chmod 700 private/
$ touch index.txt
$ echo 1000 > serial
生成根证书的私钥,需要录入秘密,记录此密码后边会使用
$ openssl genrsa -aes256 -out private/ca.key.pem 4096
生成根证书CA
$openssl req -config openssl.cnf -key private/ca.key.pem \
-new -x509 -days 7300 -sha256 -extensions v3_ca \
-out certs/ca.cert.pem
1)先录入上边的私钥密码
2)填写信息,记录录入的信息后边用到
Country Name (2 letter code):CN //国家名
State or Province Name:beijing //省名
Locality Name:beijing //城市名
Organization Name:test //组织名称
Organizational Unit Name:test //组织单位名称
Common Name: 服务器域名或是ip
Email Address:邮件
$ chmod 444 certs/ca.cert.pem
二 生成服务器证书
生成服务器证书密钥
$ openssl genrsa -out broker.key.pem 2048
$ openssl pkcs8 -topk8 -inform PEM -outform PEM \
-in broker.key.pem -out broker.key-pk8.pem -nocrypt
生成服务器证书请求,根据提示填写信息国家等基本信息和CA根证书一一致。
Common Name要填写服务器的域名(单Broker可以填写IP)
$ openssl req -config openssl.cnf \
-key broker.key.pem -new -sha256 -out broker.csr.pem
$ openssl ca -config openssl.cnf -extensions server_cert \
-days 1000 -notext -md sha256 \
-in broker.csr.pem -out broker.cert.pem
三 Broker配置
broker.conf文件中
默认brokerServicePortTls webServicePortTls为空,不启动TLS通过填写端口号告诉服务器开启TL通道,
如果相关闭普通通道把brokerServicePort和webServicePort的端口去掉。
brokerServicePort=6650
brokerServicePortTls=6651
webServicePort=8080
webServicePortTls=8443
tlsCertificateFilePath=/data/my-ca/broker.cert.pem
tlsKeyFilePath=/data/my-ca/broker.key-pk8.pem
tlsTrustCertsFilePath=/data/my-ca/certs/ca.cert.pem
注意:官方文档中tlsProtocols tlsCiphers 如果配置了我使用客户端测试时会不通过。此两项不填写测试可以通过。
四 配置完成broker.conf启动Broker查看日志文件提示以下信息说明服务端开启了TLS服务
Started PulsarServerConnector@6a2eea2a{SSL,[ssl, http/1.1]}{0.0.0.0:8443}
五 JAVA客户端测试
1)拷出刚才生成的公有证书 /data/my-ca/certs/ca.cert.pem 放到客户端服务上
2)java 主要代码,发送或接收数据正常说明配置成功
PulsarClient client =PulsarClient.builder()
.serviceUrl(url)
.tlsTrustCertsFilePath("D:/jar/ca.cert.pem")//客户端服务器上公有证书路径
.enableTlsHostnameVerification(false)
.allowTlsInsecureConnection(false)