原文来自静雅斋,转载请注明出处。

0x00

很多时候开发者经常忘记备份私钥公钥,私钥如果没有保留,就无法让多个证书共享一个私钥,而公钥没有保留则会导致无法生成 CSR,不过我们可以通过私钥重新生成公钥。也可以使用 openssl 产生 CSR 请求文件。

0x01

  1. 从钥匙串导出私钥为 private.p12

  2. 使用 openssl 转换为 pem 格式并且直接根据私钥生成公钥,这里需要输入第一步的密码

> openssl pkcs12 -in private.p12 -nocerts -nodes | openssl rsa -pubout > public.pem
  1. 导入钥匙串,由于钥匙串存在一个 bug,不能直接导入 pem 格式的密钥,因此必须通过命令行导入

> security -v import public.pem -k ~/Library/Keychains/login.keychain

注意这里得指定 login.keychain,否则会导致找不到这个导入的密钥,当然这里也可以更换为其他的钥匙串

注意,这里也有一个坑,目前钥匙串存在一个 bug,用户不能对命令行导入的密钥修改名称,除非更改密钥访问控制权限,但是这又会导致另外一个问题,就是如果改变了导入的密钥,就会只能对这个导入的密钥做一次操作,比如导出密钥或者生成 CSR 请求文件,这一次操作过后就会令密钥报废,任何操作都会报错,因此,建议在生成 CSR 文件过后就删掉这个公钥。

0x02

  1. 一样先是导出 p12 文件

  2. 将其转换为 pem 格式并且据此生成 CSR 证书请求文件

openssl req -new -key <(openssl pkcs12 -in private.p12 -nocerts -nodes -passin pass:"") > new.certSigningRequest
  1. 根据提示符要求填入各项内容(实际上苹果不看这些内容,随便填)


山河永寂
2.4k 声望159 粉丝