内容简介:在前面的例子中,我们介绍了如何配置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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Kubernetes helm API 客户端文件生成和远程调用
- 支付宝客户端架构解析:iOS 客户端启动性能优化初探
- 自己动手做数据库客户端: BashSQL开源数据库客户端
- 支付宝客户端架构解析:Android 客户端启动速度优化之「垃圾回收」
- 客户端HTTP缓存
- 简析移动客户端安全
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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》 这本书的介绍吧!