Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows上Java和Python之间的IPC保护当前用户_Java_Python_Windows_Ipc_Ssl Certificate - Fatal编程技术网

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

Windows上Java和Python之间的IPC保护当前用户,java,python,windows,ipc,ssl-certificate,Java,Python,Windows,Ipc,Ssl Certificate,我们有一个RESTAPI,它需要客户端证书身份验证。这个API由用户可以运行的python脚本集合使用。为了使用户不必在每次运行其中一个脚本时都为其客户机证书输入密码,我们用java创建了这个代理进程,用户可以在后台启动并运行该进程,该进程将用户的证书密码保存在内存中(我们只是在JVM中设置了javax.net.ssl.keystrepassword属性)。脚本与该进程通信,该进程只是将Rest API调用转发给服务器(添加证书凭据) 为了在脚本和代理进程之间进行IPC,我们只使用了一个套接字。

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

为了在脚本和代理进程之间进行IPC,我们只使用了一个套接字。问题是,套接字带来了安全风险,因为有人可以通过另一个人机器上的代理进程端口进行通信,使用另一个人的证书使用Rest API。我们通过使用java se在某种程度上降低了风险只允许从本地主机连接到端口的安全性。我认为,虽然理论上有些人仍然可以通过远程连接到机器,然后使用端口来实现。有没有办法进一步限制当前windows用户使用端口?或者我可以使用另一种形式的IPC,使用cur进行授权租用windows用户

我们将Java用于代理过程,只是因为我们团队中的每个人都比python更熟悉Java,但如果有帮助的话,可以用python重写Java


编辑:刚刚记住,在代理过程中使用java的另一个原因是,我们一直在使用python v2.6,在这个版本中,似乎不支持带有客户端证书的https(至少在不使用第三方库的情况下是这样).

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


这是安全的,只要对手无法获得cookie,cookie就应该受到文件系统ACL的保护。

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

谢谢,我认为这会起作用。我仍然必须使用单独的java进程作为http客户端,因为我们必须使用python v2.6,而且它似乎无法通过客户端证书处理https但是,通过使用cookies,我认为我可以在每次python脚本运行时生成一个新的java进程,然后使用标准的输入/输出与之通信python实际上可以很好地处理客户端证书,并且已经这样做了很长时间了。好吧,在文档中再深入一些,看起来确实可以但是,我们的证书采用PKCS#12格式,似乎不受支持。