2014-11-21 54 views
0

类KeyStore有一个名为setCertificateEntry(别名,证书)的方法。我看到的大多数客户端示例都使用“ca”作为别名。服务器在客户端服务器握手过程中是否自动询问“ca”?如果我使用“abc”而不是“ca?”,会发生什么?问候。Java KeyStore类中使用的别名是如何的?

回答

3

别名实际上只是您使用的密钥库的本地名称。它是识别密钥库中的条目的标识,因此您不能重复使用它用于两个条目,但它可以是任何您喜欢的(尽管我必须承认我从未尝试过使用非ASCII字符,并且仅限官方信任库使用小写字母或数字)。

documentation还说:

无论别名是区分大小写的实现有关。为了避免问题,建议不要在KeyStore中使用仅在大小写不同的别名。

某些keystore实现和格式可能有更多的约束或使用不同的名称。例如,WINDOWS-ROOT密钥库(这是Windows本地存储的前端)使用Windows的“友好名称”作为别名,但不幸在Windows证书存储中不是唯一的,因此可以隐藏本地存储中的某些证书并且不可用(这是从别名到输入的映射,加载具有相同名称的新条目会替换另一个条目)。但是,这当然不应该成为Android的问题。

如果您正在构建将用作信任库(可能包含多个CA)的密钥库,那么调用一个“ca”会使得以后难以识别它们。 (这主要是一个管理问题,以便能够手动查找哪个证书位于哪个位置。)

如果您查看默认信任库,则会获取名称类似于这些CA证书的Subject DN的别名“verisignclass1g2ca”。

对于用作密钥库(而不是信任库)且包含多个私钥项的密钥库,拥有一个标识符通常更重要,因为这可以帮助您配置应用程序以使用特定证书来识别本身。