通过客户端身份验证实现java SSL和TLS服务器套接字

通过客户端身份验证实现java SSL和TLS服务器套接字,java,sockets,ssl,tcp,server,Java,Sockets,Ssl,Tcp,Server,我正在从事一个项目,该项目包括开发一个TLS和SSL JAVA TCP/IP(套接字)服务器 服务器必须接受TLS和SSL TCP/IP连接 实际上,我开发了一个多线程服务器,它可以同时接受和响应多个客户机,但我仍然没有看到一个解决方案使它能够与TLS和SSL连接一起工作 我已经阅读了有关SSLServerSocket和ServerSocketFactory的信息,但我没有得到他们如何帮助我获得证书: 我不知道如何像Stunnel中那样为套接字提供CA文件路径(私有证书路径)(例如:CAfile

我正在从事一个项目,该项目包括开发一个TLS和SSL JAVA TCP/IP(套接字)服务器

服务器必须接受TLS和SSL TCP/IP连接

实际上,我开发了一个多线程服务器,它可以同时接受和响应多个客户机,但我仍然没有看到一个解决方案使它能够与TLS和SSL连接一起工作

我已经阅读了有关
SSLServerSocket
ServerSocketFactory
的信息,但我没有得到他们如何帮助我获得证书:

我不知道如何像Stunnel中那样为套接字提供CA文件路径(私有证书路径)(例如:CAfile=D:\projects\mytools\eclipse\TunRootCA1.pem或rootcert.crt)


让我更准确地描述一下情况: 实际上,我正在进行的项目包括开发一个服务器JAVA应用程序,该应用程序连接使用TLS或SSL证书的POS设备。 服务器必须接受流并进行一些功能控制(如数量、平移等),然后将其切换到第三方服务器。 服务器必须使用单边证书验证: 客户端使用从国家权威机构网站下载的证书(.ca),服务器使用由同一国家权威机构签署的证书 除TLS和SSL连接外,服务器的所有部分都已就绪 谢谢

如果有人能描述我实现JavaSSL和TLS服务器TCP/IP套接字的步骤(带有代码示例)(具有上述行为),我将不胜感激


非常感谢

不幸的是,这不是TLS/SSL的工作方式

客户端启动连接并向我的服务器发送公共证书

客户端启动连接,接收服务器证书,验证它,接收来自服务器的证书请求,并发送自己的证书(如果可以)

服务器必须使用其私有证书(存储在某个预定义路径中)对接收到的证书进行身份验证

毫无意义。没有私有证书这样的东西。服务器通过(a)检查其数字签名和(b)从其签名者到其信任的签名者形成信任链来验证证书

服务器将肯定响应发送回客户端

服务器完成TLS/SSL握手或发送TLS警报或关闭连接。对接受的客户端证书没有肯定的响应

客户端将其消息发送到服务器(清除消息)

通道现在在两个方向上都加密了

服务器向客户端发送其响应消息(清除消息)

通道现在在两个方向上都加密了


如前所述,您的要求既不符合TLS,也不安全。回顾一下。

非常感谢您的详细和准确的解释。我可能会错过这个场景(因为我错误地理解了TLS/SSL的功能。我根据你的宝贵解释重新安排了我的帖子。我不明白你为什么现在重新指定TLS的工作原理。这根本不是你要求的一部分。你现在的要求只是使用TLS。你的实际问题与第1点无关-5.让我更准确地描述一下情况:实际上,我正在从事的项目包括开发一个服务器JAVA应用程序,该应用程序与使用TLS或SSL证书的POS设备连接。服务器必须接受流程并进行一些功能控制(如金额、PAN等)然后将其切换到第三方服务器。服务器必须使用单边证书验证:客户端使用从国家权威机构网站下载的证书(.ca),服务器使用从同一国家权威机构签名的证书实际上是您的1到5分(实际上,我的分数)不属于此问题或此要求的一部分,应从问题中删除。您应该学习JSSE参考指南,并在有实际问题时返回。您的观点(实际上,您已清楚解释的标准观点)关于JSSE参考指南,再次感谢您的建议,我将从现在开始研究它们。对于任何需要帮助的人(像您一样),我的问题将保持不变它们是毫无意义和无关的,我正在删除它们。您不需要在这里重新指定TLS,而且您也无法阻止这些步骤的发生,更不用说导致这些步骤,只要您正确地使用TLS并实现密钥库和信任库,这就是您的问题所在。