JKS,BKS和PKCS12文件格式

时间:2015-10-20 14:50:16

标签: android keystore jks pkcs12

我正在设置一个无头服务器,使用用户提供的数据(JS,CSS,HTML +密钥库)为Android构建Phonegap混合应用程序。我想进行一些基本的客户端检查,以确保上传的密钥库有效。对于JKS文件,我发现我可以通过确保提供的文件的前四个字节是指定here的MAGIC编号0xFEEDFEED来进行基本检查。我意识到这并没有消除用户提供垃圾的可能性,但它确实有助于作为初步的客户端屏幕。我想对PKCS12和BKS密钥库进行类似的筛选,但是无法找到这些文件格式的任何解释。我非常感谢任何能够提供有关该主题的信息的人。

1 个答案:

答案 0 :(得分:1)

首先,要考虑两件事:

  • JCEKS在您的列表中缺失(更安全的JKS版本,幻数为0xCECECECE)。
  • BKS有两个不兼容的版本。较新的版本是在Bouncy Castle 1.47中引入的,完全取代了旧版本。因此,使用BC 1.47或更高版本生成的BC 1.47或更新版本的BKS密钥库无法读取。在BC 1.49中添加了一个新的密钥库类型“BKS-V1”,它与旧格式兼容(参见BC Release Notes)。

BKS格式以前4个字节的版本号开头,以空字节和SHA-1哈希(20个字节)结束。

PKCS#12不易检测。您必须将其解析为ASN.1结构(请参阅RFC 7292):

PFX ::= SEQUENCE {
   version    INTEGER {v3(3)}(v3,...),
   authSafe   ContentInfo,
   macData    MacData OPTIONAL
}

如果无法将其解析为ASN.1,则不是PKCS#12。

有关PKCS12格式的更易获得的解释check here