Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.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
加密:在javascript和python中模拟SSL_Javascript_Python_Ssl - Fatal编程技术网

加密:在javascript和python中模拟SSL

加密:在javascript和python中模拟SSL,javascript,python,ssl,Javascript,Python,Ssl,由于中国的原因,长城防火墙已经封锁了谷歌appengine的https端口。所以我想用javascript和python模拟一个安全套接字层,以保护我的用户信息不会被ISP和GFW捕获 我的计划: 握手: 浏览器请求服务器,服务器生成加密密钥k1,并解密密钥k2,将k1发送到浏览器。 浏览器生成一个加密密钥k3,并解密密钥k4,将k3发送到服务器 浏览: 在会话期间,浏览器使用k1加密数据并发送到服务器,服务器使用k2解密。服务器使用k3加密数据并响应浏览器,浏览器使用k4解密 请找出我

由于中国的原因,长城防火墙已经封锁了谷歌appengine的https端口。所以我想用javascript和python模拟一个安全套接字层,以保护我的用户信息不会被ISP和GFW捕获

我的计划:

  • 握手:
浏览器请求服务器,服务器生成加密密钥k1,并解密密钥k2,将k1发送到浏览器。 浏览器生成一个加密密钥k3,并解密密钥k4,将k3发送到服务器

  • 浏览:
在会话期间,浏览器使用k1加密数据并发送到服务器,服务器使用k2解密。服务器使用k3加密数据并响应浏览器,浏览器使用k4解密

请找出我的错误

如果这是对的,我的问题是

  • 如何在中生成密钥对 javascript和python,有吗 一些图书馆
  • 如何在中加密和解密数据 javascript和python,有吗 一些图书馆

  • 如果安全性真的是一个大问题,那么就有一个大问题:您的算法将被不安全地传输。你能完全信任客户吗?客户端可以信任服务器吗?

    您有一个基本问题,即SSL的JavaScript实现没有内置的根证书来建立信任,这使得无法防止中间人攻击。您从站点交付的任何证书(包括根证书)都可能被间谍截获并替换


    请注意,这是一个基本限制,而不是SSL工作方式的特殊性。所有加密安全性都依赖于建立共享秘密。主流浏览器部署的根证书提供了由认证机构(CA)建立的信任网络的入口点,使您能够与已知的第三方建立共享机密。这些证书不能被JavaScript代码直接访问。它们只用于建立安全的(例如,HTTPS)连接。

    < P>你不能阻止中间的人捕获你的数据包/消息,尤其是如果他们真的不介意你发现的话。你所能做的就是加密你的信息,这样就不会让它们读取你发送和接收的信息。从理论上讲,这很好,但在实践中,即使有钥匙,你也不能用手进行现代加密:你还需要传输一些软件,这就是它变得更加尴尬的地方

    您希望加密软件的客户端位于本地,或者至少能够检查加密软件的数字签名是否正确。数字签名很难伪造。交付已签名的代码,检查其签名,如果签名根据您信任的公钥进行验证(唉,您必须将其传输到带外),那么您知道代码(以及随代码一起发送的任何CA证书–信任根)可以被信任以按需工作。然后,数据包可以通过普通的HTTP传输;它们要么到达目的地,要么被截获,但无论如何,除了预期的接收者之外,没有人能够阅读它们。SSL的唯一优点是,它为您构建了几乎所有这些内容,并使其变得简单

    我不知道用Javascript实现这一切有多实际。显然,它可以做到这一点——它是一种图灵完整语言,可以访问所有必需的系统调用——但它可能会非常昂贵。使用GPG可能更容易思考


    (向政府隐瞒您正在通信的事实完全是另一个问题。)

    这里的其他答案是正确的:您将无法安全地交付将在客户端上运行的JavaScript。但是,如果您只是想进一步了解这些内容,请查看OpenSourceProjectForge。它有一个JavaScript的SSL/TLS实现和一个简单的Python SSL服务器:

    如果您想进一步了解它的用途:


    我认为开源算法是可以的,有一些加密,即使你知道加密密钥,但你不能解密,也不能从加密密钥中获得解密密钥。不,问题是Marcelo说的,是什么阻止了中国的邪恶防火墙成为一个中间人,把一个完全不受保护的版本扔向你的客户?或者发送他们自己的公钥(因为他们有自己的私钥,所以他们可以解密所有内容。)使用SSL,您可以从头安装一对或根CA,客户端使用它们来确保公钥真正属于正确的地址。当你试图用javascript来做这件事的时候,你就不能再验证你的对手了,一个很大的安全漏洞就被打开了。只是为了我自己的网站,不是为了广泛使用。是的,但这并不重要:如果你需要加密你的信息,那么你必须确保加密是安全的。如果没有,您也可以跳过加密,因为它不会增加任何保护。谢谢。是的,我的计划太弱了。但我想要的是多一点保护,我是被迫违背我的意愿这么做的。如果不通过备用通信通道部署共享机密或CA根,或者通过主通道部署它们,并通过备用通道确认它们的有效性,就无法做你想要做的事情(例如,证书上有指纹,可以通过电话读出指纹进行确认)。如果没有这些指纹,假设完全可以访问您的通信通道,发动中间人攻击几乎是微不足道的。