2010-11-23 24 views
0

我们有一个Rest API,需要客户端证书身份验证。 API由用户可以运行的这组Python脚本使用。为了让用户在每次运行其中一个脚本时不必为其客户端证书输入密码,我们使用java创建了该代理程序,用户可以启动并在保存内存中的用户证书密码(我们只需在JVM中设置javax.net.ssl.keyStorePassword属性)。脚本与此进程进行通信,并且该进程仅将Rest API调用转发给服务器(添加证书凭证)。在Java和Python之间的Windows上的IPC保护当前用户

要在脚本和代理程序之间执行IPC,我们只需使用套接字。问题在于套接字打开安全风险,因为有人可以通过另一个人的机器上的代理进程端口进行通信来使用其他人的证书来使用Rest API。我们通过使用java安全性来允许从本地主机连接到端口,从而减轻了风险。我认为虽然理论上有人可以通过远程连接到机器然后使用端口来完成。有没有办法进一步限制端口的使用到当前的Windows用户?或者,也许有另一种形式的IPC可以使用,可以使用当前的Windows用户进行授权?

我们正在使用Java进行代理程序,这是因为我们团队中的每个人都比Java更熟悉Java,但是如果这可能会有所帮助,它可以用python重写。

编辑:只记得其他原因使用Java的代理进程是我们坚持使用python V2.6,并在此版本的HTTPS客户端证书似乎并不支持(至少不是没有使用第三方库)。

回答

0

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

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

+0

谢谢,我认为这会奏效。我仍然需要使用一个单独的java进程作为http客户端,因为我们必须使用python v2.6,并且它似乎没有使用客户端证书处理https,但是使用cookie我想我可以产生一个新的java进程每次运行一个python脚本,然后使用标准输入/输出与它进行通信 – Dan 2010-11-23 19:44:57

0

我想我已经想出了一个灵感来自上述Martin的文章的解决方案。当代理程序启动时,我将创建一个侦听IPC端口的迷你HTTP服务器。同样在启动期间,我会写一个文件,其中包含一个随机生成的密码(每次启动都不相同)到用户的主目录,以便只有用户可以读取该文件(或管理员,但我不认为我需要担心)。然后,我将通过要求所有发送到那里的http请求使用密码来锁定IPC端口。这有点Rube Goldberg式,但我认为它会起作用。