java - Java KeyStore 类中如何使用别名?

标签 java android ssl ssl-certificate

KeyStore 类有一个名为 setCertificateEntry(alias, certificate) 的方法。我看到的大多数客户端示例都使用“ca”作为别名。服务器是否在客户端-服务器握手期间自动请求“ca”?如果我使用“abc”而不是“ca”,究竟会发生什么?问候。

最佳答案

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

documentation还说:

Whether aliases are case sensitive is implementation dependent. In order to avoid problems, it is recommended not to use aliases in a KeyStore that only differ in case.

一些 keystore 实现和格式可能有更多限制或以不同方式使用该名称。例如,WINDOWS-ROOT keystore(它是 Windows native 存储的前端)使用 Windows 的“友好名称”作为别名,不幸的是,这在 Windows 证书存储中不是唯一的,因此 native 存储中的某些证书​​可能被隐藏并且无法使用(它是从别名到条目的映射,加载一个具有相同名称的新条目替换另一个)。但是,当然,这在 Android 上不应该是一个问题。

如果您正在构建一个将用作信任库的 keystore ,它可能包含许多 CA,调用一个“ca”将使以后难以识别它们. (这主要是一个管理问题,能够手动找到哪个证书在哪里。)

如果您查看默认信任库,您将获得名称类似于这些 CA 证书的主题 DN 的别名,例如“verisignclass1g2ca”。

对于用作 keystore (而不是信任库)并且包含多个私钥条目的 keystore ,拥有一个您可以记住的标识符通常更为重要,因为这可以帮助您配置您的应用程序以使用特定证书来标识自己.

关于java - Java KeyStore 类中如何使用别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27070724/

相关文章:

android - XMLPullparser getEventType 每次都返回 0

android - NewRelic 导致构建错误

django - 拒绝访问 Django 应用程序中的 Windows 证书存储

java - 将我现有的 Android 项目从 Java 8 迁移到 Java 11 时出现 "error: package android.view does not exist"错误

java - 我的约会让我疯狂 (Java)

android - 使用 kotlin 协程时使用 try catch block 吞下异常

javascript - 来自带有 SSL 的 CDN 的 Google jQuery - iPad 的问题

.htaccess - 多个域,一个 SSL,需要一个 htaccess 文件

java - 如何获取列表中选项标签的内部文本?

java - 我怎样才能最好地让一个类(class)为另一个类(class)提供一些东西?