问题标签 [pki]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
863 浏览

security - PKI 的证书颁发机构

有些人认为 PKI 的证书颁发机构应该是政府,但其他人认为证书颁发机构应该是私人实体,例如银行、公司或学校。每种方法的优点和缺点是什么?

0 投票
3 回答
11799 浏览

security - 唯一标识用户时要使用客户端证书的哪些部分?

我正在设计一个系统,除了用户名/密码身份验证之外,用户还可以注册并随后使用客户端证书进行身份验证。

客户端证书必须是由配置的证书颁发机构列表颁发的有效证书,并且在出示时将被检查(验证)。

在注册阶段,我需要将部分客户端证书存储在用户存储库(DB、LDAP 等)中,以便我可以将使用客户端证书进行身份验证的用户映射到内部“用户”。

一个相当明显的选择是使用证书指纹。但是指纹本身是不够的,因为可能会发生冲突(即使它们不太可能发生),所以我们需要存储来自证书的附加信息。这个 SO question在这方面也很有帮助。

RFC 2459定义 (4.1.2.2) 证书序列号在给定 CA 中必须是唯一的。

结合所有这些,我正在考虑为每个注册用户存储证书序列号和证书颁发者。鉴于客户端证书将被验证且有效,这应该唯一标识每个客户端证书。这样,即使客户端证书被更新,它仍然有效(序列号保持不变,颁发者也是如此)。

我错过了什么?

0 投票
2 回答
2873 浏览

java - 构建证书颁发机构架构

我正在尝试构建一个涉及多个客户端和单个服务器的网络,两者都是用 Java 编写的。我正在尝试找到一种在客户端自动生成 CSR 的方法,该 CSR 可以发送到服务器以获得签名证书。我已经能够在 Java 中生成公钥/私钥对,但无法弄清楚如何生成 CSR。也许我正在以错误的方式做这件事!请帮忙!

0 投票
1 回答
2103 浏览

ssl - PKI 更新 SSL 证书的最佳实践

在没有用户交互的情况下更新客户端 SSL 证书的最佳做法是什么?

更具体地说:
我有一个带有 SSL 私钥/公共 x.509 证书的服务器。所有客户端都将通过 SSL 与该服务器通信。为了建立 SSL 连接,所有客户端都需要将服务器的公共证书导入其受信任的位置(信任库)。

在(客户端)安装时获取服务器的证书不是问题,因为安装程序可以(通过 SSL)联系服务器并获取服务器的公钥(或公司的根证书)。之后,安装程序可以向用户显示证书以进行视觉验证,这已经足够安全了。

服务器证书(或公司 CA)过期后会发生什么?
或者如果服务器证书被意外更改会发生什么?

使用新的服务器 SSL 证书 (CA) (自动)更新所有客户端的最佳做法是什么?请记住,安装后客户端是后台进程,并且不可能进行可视化用户交互。

当然,最简单的方法是由基础架构管理员手动更新所有客户端。

我想知道是否有一些已知的良好做法可以在无需用户干预的情况下自动更新客户端的证书?

0 投票
1 回答
374 浏览

ssl-certificate - 分布式 PKI 证书处理 - 使其用户友好

我在不同的主机上安装了一个服务器和 N 个客户端。每个主机都有在安装过程中生成的自签名证书。此时客户端身份验证已打开。这意味着在正确导入这些证书之前,它们无法相互通信,如下所述。

现在,服务器需要导入所有客户端的证书。来自这台服务器的所有客户端也是如此。这部分在安装过程中确实对用户不友好,因为客户端或服务器可以随时相互独立安装。在用户不必执行某种带外手动步骤的情况下,在客户端和服务器之间导入证书的更好方法是什么?

PS:我使用的 PKI 工具只能在本地机器上导入/导出证书。假设我目前无法更改此工具。

0 投票
2 回答
647 浏览

import - PKI 证书导入

当我使用 https 登录我的银行帐户时,在我输入登录信息之前,它只是服务器端 SSL 身份验证。我的浏览器在 SSL 会话期间根据来自服务器的证书信息进行服务器身份验证。我不必手动将服务器证书作为受信任的证书导入到我的浏览器中。它只是在 SSL 交换期间的运行时发生。

另一方面,当您查看其安装指南时,我还看到了必须手动导入证书(例如使用 keytool)的应用程序。

问题是:如果证书信息是在 SSL 会话开始时交换的,那么每一方都有足够的信息来验证另一方。为什么有些应用程序需要在客户端和服务器之间手动导入证书。无论是一方认证还是双方认证。

基于以下响应的附加信息:我指的是我正在安装基于客户端-服务器模型的商业软件并打开客户端 SSL 身份验证的场景。我将服务器安装在机器 A 上,并将 2 个客户端安装在我的专用网络中的不同机器上。在安装过程中,服务器在本地生成一个自签名证书。2个客户也是如此。安装完成后,我被要求将客户端的证书复制到服务器机器并手动将它们导入为受信任的证书。此外,将服务器证书复制到客户端计算机并导入到其受信任的存储中。他们在 java keytool 之上提供了一个包装工具来执行证书导入。为什么这里需要手动导入吗?无论如何,客户端和服务器将在 SSL 握手期间交换证书信息并执行身份验证。同样,这些是此处涉及的自签名证书和 CA。

0 投票
0 回答
532 浏览

digital-signature - 使用公钥验证分离的 xml 签名

我想使用公钥验证分离的 XML 签名。

我尝试过使用 gpg 和 openssl 但没有成功。任何人都可以向我提供使用公钥进行验证的步骤。

0 投票
1 回答
1860 浏览

java - 我应该接受由信任锚签名的 OCSP 响应者证书吗?

有人可以帮我解决以下问题吗?
RFC2560 定义了何时可以接受 OCSP 响应者证书(签署响应):

我的问题是:
如果 OCSP 响应者的证书是由验证路径的 Trust Anchor 签名的,它是否也被认为是接受的?
我的印象应该是,但是上面没有从 RFC 明确说明,也找不到对此的明确参考。

从我对 RFC 的阅读来看,即使它是由 TA 签名的,它仍然对 OCSP 响应无效。
任何帮助表示赞赏
注意:我正在使用java,以防万一

更新:
在 RFC 的第 2.2 节中:

所有确定的响应消息都应进行数字签名。用于签署响应的密钥
必须属于以下之一:

-- 颁发相关证书的 CA
-- 其公钥受请求者信任的 Trusted Responder
-- 持有 CA 直接颁发的特殊标记证书的 CA 指定响应者(Authorized Responder),表明响应者可以为该 CA 发出 OCSP 响应

第2点对我来说似乎模棱两可。
这可能意味着:
a)任何 PK 受信任,因此 Trust Anchor 是可以接受的

b)具有第一个引号中第 (1) 点的含义,这意味着预配置一个证书(任何)以信任为 OCSP 响应者,例如在这里用java完成:

0 投票
1 回答
863 浏览

java - OCSP 响应中的 responderID 有什么用?

我不清楚在 OCSP 响应的定义中使用响应者 ID。

我正在通过 Java 的 PKIX API 进行 OCSP 检查。

使用我得到的第三方库(在 OCSP 响应处理期间):

java.security.cert.CertPathValidatorException:无法确定吊销状态:响应中的 ResponderID 与响应者证书不匹配。

如果我切换到默认提供程序(例如 SUN),则不会出现此类异常,并且吊销检查工作正常。

进一步研究,似乎此异常与响应者的标识符是否将使用签名证书的公钥或签名证书的主题的密钥哈希有关。

我不知道有什么区别以及为什么 SUN 的实施对 OCSP 响应没有问题。

在我了解这里发生的事情之前,我不想草率地得出结论并放弃另一个库。

有人可以帮我理解这里可能是什么问题吗?

0 投票
1 回答
1039 浏览

jboss - CAC 启用 JBoss

我正在尝试启用部署在 JBoss 4.2.3 上的 Web 应用程序,以便在客户端计算机上使用 DOD 颁发的 CAC、ActivClient 和 IE 进行客户端证书身份验证。作为概念证明,我能够使用软证书(生成自签名证书,转换为 PKCS12 格式并导入 IE)为 JMX 控制台进行客户端证书身份验证。我还可以使用我的示例(演示)CAC 在线向 TriCare 进行身份验证,大概是演示用户。

但是,我尝试从 CAC 导出证书,并将其导入我的 JKS 信任库,使用 CN 条目作为别名(不确定是否有必要),但它根本不起作用。我在 JBoss 日志中收到一条错误消息,提示“链中的空证书”,并且客户端没有提示选择证书或输入 PIN。我最好的理论是我没有正确的信任库中的证书,所以它不知道从客户端请求什么证书,但我不知道如何确认这种怀疑,或者可能有什么问题。

将 JBoss 与 Apache 放在一起会使这个过程更容易吗?(这是一个内部应用程序,所以我们一直让 JBoss 成为 Web 服务器。)

升级到较旧的 JBoss 版本会有所帮助吗?

是否有我可以在某处启用的调试语句让我更清楚地了解正在发生的事情?

某处是否有分步文档?我如何获得这方面的专业知识?我一直在根据 JBoss 4 在线文档、“JBoss in Action”、“Core Security Patterns”和一些在 SO 中涉及到这个问题的 Q&A 来拼凑我的解决方案。

任何帮助将不胜感激!