如何生成测试用kafka服务端和客户端证书

栏目: 后端 · 发布时间: 5年前

内容简介:在前面的例子中,我们介绍了如何配置kafka服务端和客户端的SSL链接。这个前提必须得有证书,如果已经有证书了,或者有现成的CA,那么可以自行签出证书即可;如果没有证书也没有CA服务器,那么必须生成一套测试用证书。这里我们介绍如何使用openssl生成一套测试kafak ssl链接的证书,包括服务端和客户端的truststore和keystore,以及作为golang客户端使用的PEM格式证书。

在前面的例子中,我们介绍了如何配置kafka服务端和客户端的SSL链接。

这个前提必须得有证书,如果已经有证书了,或者有现成的CA,那么可以自行签出证书即可;如果没有证书也没有CA服务器,那么必须生成一套测试用证书。

这里我们介绍如何使用openssl生成一套测试kafak ssl链接的证书,包括服务端和客户端的truststore和keystore,以及作为golang客户端使用的PEM格式证书。

第一步:生成一个CA根证书

1.1 生成一个CA的私钥

# generate ca key
openssl genpkey -algorithm RSA -out ca.key

1.2 根据CA的私钥,生成一份自签名的CA根证书

# generate self-signed ca certificate
openssl req -new -x509 -days 365 -key ca.key -out ca.pem \
  -subj "/C=cn/O=mycomp/OU=myorg/CN=ca/emailAddress=ca@example.com"

第二步:生成服务端证书

2.1 生成服务端私钥

# generate server key
openssl genpkey -algorithm RSA -out server.key

2.2 生成服务端证书CSR

# generate server certificate signing request
openssl req -new -nodes -days 365 -key server.key -out server.csr \
  -subj "/C=cn/O=mycomp/OU=myorg/CN=server/emailAddress=server@example.com"

2.3 使用前面生成的CA根证书对服务端的CSR签名,生成服务端证书

# generate server certificate
openssl x509 -req -days 365 \
  -in server.csr -out server.pem \
  -CA ca.pem -CAkey ca.key -CAcreateserial

第三步:生成客户端证书

3.1 生成客户端私钥

# generate client key
openssl genpkey -algorithm RSA -out client.key

3.2 生成客户端证书CSR

# generate client certificate signing request
openssl req -new -nodes -days 365 -key client.key -out client.csr 、
  -subj "/C=CN/O=mycomp/OU=myorg/CN=client/emailAddress=client@example.com"

3.3 使用前面生成的CA根证书对客户端的CSR签名,生成客户端证书

# generate client certificate
openssl x509 -req -days 365 -in client.csr -out client.pem \
  -CA ca.pem -CAkey ca.key -CAcreateserial

第四步:检查生成的服务端和客户端证书

openssl x509 -noout -text -in server.pem
openssl x509 -noout -text -in client.pem

第五步:生成truststore

因为服务端和客户端使用同一个CA签发的证书,所以在此服务端和客户端使用同一个truststore就可以了,即truststore只包含一个此CA证书信息。

# generate server/client truststore
keytool -import -noprompt -file ca.pem \
  -keystore truststore.jks -storepass test1234

第六步:生成服务端keystore

6.1 生成服务端的P12格式证书

# generate server p12
openssl pkcs12 -export \
  -in server.pem -inkey server.key \
  -out server.p12 -passout pass:test1234

6.2 生成服务端的JKS格式证书

# generate server jks
keytool -importkeystore 、
  -srckeystore server.p12 -srcstoretype PKCS12 \
  -destkeystore server.keystore.jks \
  -srcstorepass test1234 -deststorepass test1234

第七步:生成客户端keystore

7.1 生成服务端的P12格式证书

# generate client p12
openssl pkcs12 -export \
  -in client.pem -inkey client.key -out client.p12 \
  -passout pass:test1234

7.2 生成服务端的JKS格式证书

# generate client jks
keytool -importkeystore \
  -srckeystore client.p12 -srcstoretype PKCS12 \
  -destkeystore client.keystore.jks \
  -srcstorepass test1234 -deststorepass test1234

第八步:验证JKS证书的内容

keytool --list -keystore client.keystore.jks -storepass test1234
keytool --list -keystore server.keystore.jks -storepass testr1234
keytool --list -keystore truststore.jks -storepass test1234

第九步:更改访问主机域名

在前面步骤中,我们生成的服务端和客户端的证书里面配置了证书subject的CN域为'server'和'client',在SSL验证主机名的时候就要求主机的名字必须是server和client,否则SSL验证就会报失败。

这个结果就是这个证书必须在主机名为server/client的机器上使用,不能在其他机器上使用。这个限制可不好,所以SSL标准定义了证书扩展属性SAN(Subject Alternative Name),这是SSL 标准 x509 中定义的一个扩展,可以扩展此证书支持的域名,使得一个证书可以支持多个不同域名的解析。

具体怎么操作:

9.1 首先配置openssl.cnf

[ CA_default ]
...
# Extension copying option: use with caution.
copy_extensions = copy

[ req ]
...
req_extensions = v3_req # The extensions to add to a certificate request

[ v3_req ]
...
# Extensions to add to a certificate request
...
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.kafka.example.com
DNS.2 = *.example.com

9.2 把前面的步骤2.2/2.3/3.2/3.3修改成如下格式,即指定扩展属性的openssl.cnf

2.2:改为

# generate server certificate signing request
openssl req -new -nodes -days 365 -key server.key -out server.csr \
  -subj "/C=cn/O=mycomp/OU=myorg/CN=server/emailAddress=server@example.com" \
  -config ./openssl.cnf -extensions v3_req

2.3:改为

# generate server certificate
openssl x509 -req -days 365 \
  -in server.csr -out server.pem \
  -CA ca.pem -CAkey ca.key -CAcreateserial \
  -extfile ./openssl.cnf -extensions v3_req

3.2:改为

# generate client certificate signing request
openssl req -new -nodes -days 365 -key client.key -out client.csr 、
  -subj "/C=CN/O=mycomp/OU=myorg/CN=client/emailAddress=client@example.com" \
  -config ./openssl.cnf -extensions v3_req

3.3:改为

# generate client certificate
openssl x509 -req -days 365 -in client.csr -out client.pem \
  -CA ca.pem -CAkey ca.key -CAcreateserial \
  -extfile ./openssl.cnf -extensions v3_req

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Programming Amazon Web Services

Programming Amazon Web Services

James Murty / O'Reilly Media / 2008-3-25 / USD 49.99

Building on the success of its storefront and fulfillment services, Amazon now allows businesses to "rent" computing power, data storage and bandwidth on its vast network platform. This book demonstra......一起来看看 《Programming Amazon Web Services》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

SHA 加密
SHA 加密

SHA 加密工具

html转js在线工具
html转js在线工具

html转js在线工具