在Java和Python之间的Windows上的IPC保护了当前用户

时间:2010-11-23 14:33:55

标签: java python windows ipc ssl-certificate

我们有一个需要客户端证书身份验证的Rest API。该用户可以运行的python脚本集合使用该API。为了使用户不必在每次运行其中一个脚本时输入其客户端证书的密码,我们在java中创建了这个代理进程,用户可以在后台启动并运行该代理进程用户在内存中的证书密码(我们只在JVM中设置了javax.net.ssl.keyStorePassword属性)。脚本与此进程通信,并且该进程只是将Rest API调用转发到服务器(添加证书凭据)。

要在脚本和代理进程之间执行IPC,我们只使用套接字。问题是套接字会带来安全风险,因为有人可以通过另一个人的机器上的代理进程端口进行通信,使用另一个人的证书来使用Rest API。我们通过使用java安全性仅允许从localhost连接到端口来减轻风险。我认为虽然理论上有人可以通过远程连接到机器然后使用端口来实现。有没有办法进一步限制端口对当前Windows用户的使用?或者是否有其他形式的IPC可以使用,可以使用当前的Windows用户进行授权?

我们正在使用Java作为代理进程,因为我们团队中的每个人都比Java更熟悉Java,但如果有帮助的话,可以在python中重写。

编辑:只记得使用java进行代理进程的另一个原因是我们坚持使用python v2.6并且在这个版本中https与客户端证书似乎不受支持(至少不使用第三方库)。

2 个答案:

答案 0 :(得分:0)

最简单的方法是使用基于cookie的访问控制。在用户的个人资料/ homedirectory中包含一个包含cookie的文件。让Java服务器生成并保存cookie,并让Python客户端脚本将cookie作为任何TCP连接上的第一条数据发送。

只要攻击者无法获取cookie,这就是安全的,然后应该受到文件系统ACL的保护。

答案 1 :(得分:0)

我想我已经想出了一个灵感来自Martin上面帖子的解决方案。当代理进程启动时,我将创建一个在IPC端口上侦听的迷你http服务器。此外,在启动过程中,我会将一个包含随机生成的密码(每次启动时都不同)的文件写入用户的主目录,这样只有用户才能读取文件(或管理员,但我认为我不需要担心)。然后我将通过要求发送的所有http请求来使用密码来锁定IPC端口。这有点像Rube Goldberg-esque,但我认为它会起作用。