Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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
Java 我可以向小程序提供SSH凭据而不将其泄漏到整个Internet吗?_Java_Security_Ssh_Applet_Jsessionid - Fatal编程技术网

Java 我可以向小程序提供SSH凭据而不将其泄漏到整个Internet吗?

Java 我可以向小程序提供SSH凭据而不将其泄漏到整个Internet吗?,java,security,ssh,applet,jsessionid,Java,Security,Ssh,Applet,Jsessionid,我有一个小程序,可以在Internet上使用,它通过SSH隧道与内部服务器通信。小程序必须具有正确的SSH凭据。将它们编译成applet不是很方便;在HTML中将它们作为小程序参数提供给Internet;让applet从applet主机服务器下载它们(同上,但不太明显)。我的问题是,是否有另一种方法我没有想到,只有applet可以获得SSH凭据?我可能可以让小程序使用与浏览器相同的会话ID,在这种情况下,我至少可以将其限制为经过身份验证的用户。。。但我真的希望有一个更安全的解决方案,没有泄漏 服

我有一个小程序,可以在Internet上使用,它通过SSH隧道与内部服务器通信。小程序必须具有正确的SSH凭据。将它们编译成applet不是很方便;在HTML中将它们作为小程序参数提供给Internet;让applet从applet主机服务器下载它们(同上,但不太明显)。我的问题是,是否有另一种方法我没有想到,只有applet可以获得SSH凭据?我可能可以让小程序使用与浏览器相同的会话ID,在这种情况下,我至少可以将其限制为经过身份验证的用户。。。但我真的希望有一个更安全的解决方案,没有泄漏

服务器堆栈有Tomcat、JSF和Facelets。Apache服务器和FTP也可用


编辑:我应该澄清的是,除了DoS之外,我所使用的内部服务本身是非常安全的,我更关心的是内部主机的安全性,而且不会成为通往任何地方的公共通道。SSH PermitOpen config元素在这里有很大的帮助。

如果客户端的计算机必须登录到您的服务器,那么客户端将能够确定它正在使用什么凭据。这是无法回避的;如果有人愿意,他们可以嗅探自己机器的互联网流量,然后找到它


如果您必须使用此ssh隧道从客户端登录,我建议您使用公钥身份验证并在主机上生成密钥,然后通过API将公钥传递给服务器,该API临时添加对该密钥的访问。

不可能。无法区分在用户计算机上运行的Java小程序和在同一台计算机上运行的用户制作的工具——从您的角度来看,它们的HTTP请求和SSH通信量将“闻起来是一样的”。最好的办法是找出某种方法,通过防火墙公开内部服务器上的必要端口,而不是让用户自己打必要的洞。

这里定义目标有问题

有两种可能的情况: 1) 您需要在用户不知道的情况下在SSH服务器上执行一些批处理(命令序列) 2) 您需要让用户以有限的方式与服务器交互

在第一种情况下,您可以向HTTP服务器发送一个批处理,并让HTTP服务器连接到SSH服务器

在第二种情况下,您通过applet向用户提供SSH访问,这与通过用户最喜欢的SSH客户端提供用户访问没有什么不同。因此,您需要为每个用户提供不同的SSH凭据(并将它们传递给小程序),仅此而已—保护凭据是用户的工作,同时您可以添加一些安全措施,例如限制IP访问


最后,我应该注意到,具有有限功能的自定义SSH服务器也可能是一个解决方案

我认为最好的方法是在防火墙外创建某种代理,使用简单的未加密TCP连接,然后通过代理建立从安全服务器到小程序的连接,SSH连接通过开放连接进行隧道传输。

您希望发布一个小程序,该小程序具有连接到SSH服务器的权限。但您不想发布凭据。这毫无意义,因为拥有连接到SSH服务器的权限和拥有连接到SSH服务器的凭据是等效的。除了连接到SSH服务器之外,您对凭据没有别的办法了。这是小程序应该拥有的权限。

谢谢,但那同样糟糕,实际上更糟。我需要保护的是里面的东西,而不仅仅是通往它的隧道。如果是这样的话,那么你就陷入了双重困境——你试图向你不信任的用户(例如,整个互联网)公开一项服务。这是什么服务?您可能需要以某种方式代理访问它;什么是合适的取决于它是什么。更重要的是,我不想暴露隧道可能到达的其他东西。除了DoS之外,服务本身是非常安全的,但是我不想打开整个内部主机,当然我也不希望SSH本身被用作任何地方的任意隧道。我可能可以通过SSH的permitepen配置元素满意地控制其中的大部分。基本上,我只是想寻求更好的安全性,但我认为我的客户端和攻击者并不是真正可以区分的。对,这就是为什么我建议你只为你需要的服务(例如主机/端口)打一个洞,而不只是完全打开防火墙,或者你设置了某种代理来有效地充当这个服务的隧道。我使用SSH而不是完全打开防火墙来获得一些安全性,对吗?我在寻找更多的安全感,而不是更少。我可以将SSH设置为这一服务的代理。我只想再把它钉牢一点。你的建议走错了方向。那怎么回答这个问题呢?或者添加任何安全性?因为它将密钥转移回服务器,而服务器是您唯一可以控制它的地方。您仍然需要每个连接的用户发起的身份验证,但根本没有办法解决这个问题。所以它只是添加了另一层身份验证?还有一个证件问题?也许我误解了你的担心。当我阅读您的问题时,问题是如何避免将凭据放在连接的不受信任端。如果这不是您的问题,那么我的答案当然不适用。但是如果您关心客户端凭据,并且不想启动从服务器到客户端的连接,那么您的选择是有限的。您可以使用基于密码的身份验证,这样可以避免存储任何内容