我有一个任务是用PKI编写一个通信器。我考虑X.509证书的实现(Java) - 我的意思是允许数据/消息机密性的SSL/TLS,以及用于消息完整性的消息验证代码。关于这些我已经阅读过一些文献,而且都是理论性的。我不确定我是否正确思考。任何人都能很好地理解PKI的想法吗?能给我任何建议吗(例如网站在哪里可以很好的解释PKI的实现)?Java - 公共密钥基础设施在通讯器中的实现
回答
由于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?
但我仍然没有抓住几件事。首先,正如它在“PKI教程”中所述,我使用openSSL来创建TLS CA,我可以创建客户端和服务器证书,但是我想远程执行客户端证书(在另一台计算机上,用户客户端必须能够创建自己的证书)。现在我可以使用openSSL命令在本地执行所有这些操作。让我解释什么,我想我的项目: 1)服务器与CA 链接2)服务器的所有用户 3)的数据库服务器它是由CA 4)用户(客户端)签署自己的证书注册到服务器并从服务器获取(证书由CA生成) 5)用户可以连接ea – mydew
客户端将使用OpenSSL创建私钥并生成CSR。客户将把CSR发送给CA. CA在验证客户身份后将创建并签署证书,并将证书发回给客户。然后,客户端可以使用证书和私钥一起建立到服务器的SSL连接。 – gtrig
好的。我现在明白了 - 对自己和你的评论进行一点研究,我想我会实施我的项目。谢谢。 – mydew
- 1. 与现有基础设施
- 2. 公共Web应用程序的硬件基础设施
- 3. 通过公共密钥值在Ruby中
- 4. 在.NET中将RSA公钥/私钥解密实现为Java/Spring
- 5. 通讯簿实施
- 6. 实施公共API
- 7. 将PHP RSA公共密钥转换为Android公共密钥
- 8. c#的RSA公共密钥的公钥#
- 9. PKI基础设施
- 10. java通过可信服务器交换公共密钥
- 11. RSA公钥基础64
- 12. 实体和基础设施服务
- 13. Multipeer Connectivity:无法通过Wifi基础设施发现设备
- 14. 在Java中有效实现RSA公钥生成和加密
- 15. 如何实现Automed IVR呼叫的基础设施?
- 16. 即时通讯实施?
- 17. Java中的即时通讯实现
- 18. 分组字典通过公共密钥
- 19. 为基于实体框架的基础设施实施有界的上下文
- 20. 在C基础设施中集成C++
- 21. 网络基础设施
- 22. 安装NServiceBus基础设施
- 23. 如何在Rails中为Sidekiq设置新的密钥基础?
- 24. 在.NET中交换公共密钥
- 25. 实现API密钥通信
- 26. 如何在SJCL中实现公钥/私钥加密?
- 27. 定期对公共密钥
- 28. 什么是公共密钥
- 29. 公共ssh密钥无效
- 30. 如何与公共密钥
在密码即使是专家和IT安全并不总是得到这个东东吧 - 我认为这是不合理的初来乍到能够生产安全应用。 – ntoskrnl
这不是商业项目,而是学术。它不一定非常安全。我只想了解如何在Java中实现PKI。 – mydew
您是否想用Java创建PKI(私钥/证书),或者您是否希望在Java内部使用Java中的现有PKI等? – gtrig