内容简介:在前面的例子中,我们介绍了如何配置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缓存
- 简析移动客户端安全
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Dream Machine
M. Mitchell Waldrop / Penguin Books / 2002-8 / USD 16.00
While most people may not be familiar with the name J. C. R. Licklider, he was the guiding spirit behind the greatest revolution of the modern era. At a time when most computers were big, ponderous ma......一起来看看 《The Dream Machine》 这本书的介绍吧!