原文来自静雅斋,转载请注明出处。
0x00
很多时候开发者经常忘记备份私钥公钥,私钥如果没有保留,就无法让多个证书共享一个私钥,而公钥没有保留则会导致无法生成 CSR,不过我们可以通过私钥重新生成公钥。也可以使用 openssl 产生 CSR 请求文件。
0x01
从钥匙串导出私钥为
private.p12
使用 openssl 转换为 pem 格式并且直接根据私钥生成公钥,这里需要输入第一步的密码
> openssl pkcs12 -in private.p12 -nocerts -nodes | openssl rsa -pubout > public.pem
导入钥匙串,由于钥匙串存在一个 bug,不能直接导入 pem 格式的密钥,因此必须通过命令行导入
> security -v import public.pem -k ~/Library/Keychains/login.keychain
注意这里得指定 login.keychain,否则会导致找不到这个导入的密钥,当然这里也可以更换为其他的钥匙串
注意,这里也有一个坑,目前钥匙串存在一个 bug,用户不能对命令行导入的密钥修改名称,除非更改密钥访问控制权限,但是这又会导致另外一个问题,就是如果改变了导入的密钥,就会只能对这个导入的密钥做一次操作,比如导出密钥或者生成 CSR 请求文件,这一次操作过后就会令密钥报废,任何操作都会报错,因此,建议在生成 CSR 文件过后就删掉这个公钥。
0x02
一样先是导出 p12 文件
将其转换为 pem 格式并且据此生成 CSR 证书请求文件
openssl req -new -key <(openssl pkcs12 -in private.p12 -nocerts -nodes -passin pass:"") > new.certSigningRequest
根据提示符要求填入各项内容(实际上苹果不看这些内容,随便填)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。