2013-10-31 23 views
1

我有一个任务是用PKI编写一个通信器。我考虑X.509证书的实现(Java) - 我的意思是允许数据/消息机密性的SSL/TLS,以及用于消息完整性的消息验证代码。关于这些我已经阅读过一些文献,而且都是理论性的。我不确定我是否正确思考。任何人都能很好地理解PKI的想法吗?能给我任何建议吗(例如网站在哪里可以很好的解释PKI的实现)?Java - 公共密钥基础设施在通讯器中的实现

+0

在密码即使是专家和IT安全并不总是得到这个东东吧 - 我认为这是不合理的初来乍到能够生产安全应用。 – ntoskrnl

+0

这不是商业项目,而是学术。它不一定非常安全。我只想了解如何在Java中实现PKI。 – mydew

+0

您是否想用Java创建PKI(私钥/证书),或者您是否希望在Java内部使用Java中的现有PKI等? – gtrig

回答

1

由于ntoskrnl的评论,这是很难做到完全正确的,甚至是专家。

这是一个基本的高层次看PKI则需要SSL连接:

  • 一个CA根密钥和相应的自签名的证书。
  • 中间CA密钥和由CA根密钥签名的证书(这 是可选的)。
  • 服务器标识密钥和由 中间CA或CA根签署的证书。
  • 由服务器信任的某个CA签署的客户端身份密钥和证书。对于您的 学术工作,您可能希望此CA与您创建的CA相同。客户端身份只在需要双向(相互)SSL时才需要,服务器在客户端进行身份验证。

运行于像Tomcat这样可以配置为SSL的Web服务。在服务器端,身份将指向服务器密钥证书。对于双向SSL,服务器上还会有可信CA证书的列表或密钥库。除非客户的证书由其中一个可信CA签署,否则服务器将不允许客户端进行连接。

在客户端,您还需要可信CA证书列表或密钥库,服务器证书必须由这些CA的一个签名。建立SSL连接时,Java将使用客户端ID密钥和证书以及信任密钥库。如果您搜索堆栈溢出,您应该找到大量的Java SSL连接示例。

要创建PKI,OpenSSL是一个很好用的工具。这是一个实用的网站:

https://pki-tutorial.readthedocs.org/en/latest/simple/index.html

一键及其相应的证书,你首先创建一个私有密钥,然后创建一个证书签名请求(CSR)。然后通过CA密钥签署CSR,并成为证书。证书包含与用于创建CSR的私钥对应的公钥。

的Mac,这里有HMAC的Java示例:HMAC-SHA1: How to do it properly in Java?

+0

但我仍然没有抓住几件事。首先,正如它在“PKI教程”中所述,我使用openSSL来创建TLS CA,我可以创建客户端和服务器证书,但是我想远程执行客户端证书(在另一台计算机上,用户客户端必须能够创建自己的证书)。现在我可以使用openSSL命令在本地执行所有这些操作。让我解释什么,我想我的项目: 1)服务器与CA 链接2)服务器的所有用户 3)的数据库服务器它是由CA 4)用户(客户端)签署自己的证书注册到服务器并从服务器获取(证书由CA生成) 5)用户可以连接ea – mydew

+0

客户端将使用OpenSSL创建私钥并生成CSR。客户将把CSR发送给CA. CA在验证客户身份后将创建并签署证书,并将证书发回给客户。然后,客户端可以使用证书和私钥一起建立到服务器的SSL连接。 – gtrig

+0

好的。我现在明白了 - 对自己和你的评论进行一点研究,我想我会实施我的项目。谢谢。 – mydew