例子
为了证明我的身份,让别人可以安全的和我通信,以及防止别人冒充我的身份,我可以申请身份证明:
- 创建自己的秘密(私钥)和公开信息(公钥)
- 使用自己的信息,填写申请表
- 将申请表提交给第三方,第三方盖章,证明我是我
- 最后我将证明和秘密放在一起,保存好
使用身份证明的方法是:
- 我使用秘密生成一个签名
- 对方使用公开信息验证签名
- 第三方使用签名验证我的身份
流程
申请数字证书的标准流程如下:
- 密钥对生成
- 创建私钥 (需严格保密)
- 生成对应的公钥
- 证书申请
- 准备申请者信息
- 填写证书申请表 (CSR)
- CA 认证
- 提交至认证机构 (CA)
- CA 验证并签发证书
- 证书安装
- 合并私钥与证书
- 安全保存完整证书
流程细节
使用技术的语言来讲,申请方首先应该创建 P12,它是 PKCS#12 的简称,全称是 Public Key Cryptography Standards,里面包含了:
- 私钥
- 证书(如果之后有)
- 证书链(如果之后有)
keytool -genkeypair \
-keysize 4096 \
-keystore keystore_file.p12 \
-storetype PKCS12 \
-alias keystore_file \
-dname "CN=keystore_file,OU=dataproxy-services" \
-keyalg RSA \
-storepass abc
生成的 p12 文件本身就是一种 keystore,可以直接被用作 csr,即 Certificate Signing Request:
keytool -certreq \
-keystore keystore_file.p12 \
-alias keystore_file \
-file certificate.csr \
-storepass abc
其中包括了从私钥中提取出来的公钥,申请着的信息,以及使用私钥对上述信息的签名。这个文件将会在之后发送给 CA 机构进行签发。
第三方的 CA 签发机构会验证信息,并使用自己的私钥签名 CSR 并且生成证书(链),发送回给申请者。
申请者要将原始的,包含私钥的 p12 合并,完成证书的安装:
keytool -importcert \
-keystore keystore_file.p12 \
-file certificate.p7b \
-alias keystore_file \
-trustcacerts \
-noprompt \
-storepass abca
如何使用
我希望将 p12 和 vault 结合起来使用。
因为 p12 是二进制文件,不适合存储和传输,因此为了存储和使用,首先需要将 p12 转化为 base64:
base64 -i keystore_file.p12 -o p12.base64
Vault 包含加密存储的功能,而 kv 适合存储证书类型的数据。我们将改文件存储到 Vault 中:
vault kv put custom/internal/certificates/kafkaKeyStore [email protected]
最后就是使用:
jks:
secretList:
- name: kafkaStore
vaultPath: "custom/internal/certificates/kafkaKeyStore"
应用启动的时候,就可以直接获得证书了。