在开源程序中encryption?

目前我正在开发一个Node.js的web服务器应用程序,然后我想提供下载和使用。 这个应用程序应该具有帐户,以便您可以login您的帐户在服务器创build的网站上。
由于这需要密码,所以我也必须考虑安全问题。 但现在,我真的不知道如何在发送和接收密码的时候保护密码。

对于存储,我只是简单地创build一个密码散列,并将散列存储在某个地方,但是传输呢?

我正在考虑SSL / https,但是这需要一个SSL证书,即使我在某个地方免费获得,我也无法在开源应用程序(?)中分享它。

我也可以以某种方式在网站上散列密码,然后把散列发送给服务器,但是我认为这也不是安全的最高标准,是吗? 考虑到没有SSL会导致更多的弊端,而不仅仅是更糟糕/没有encryption。

有任何想法吗?

我正在考虑SSL / https,但是这需要一个SSL证书,即使我在某个地方免费获得,我也无法在开源应用程序(?)中分享它。

使用SSL / TLS。 即使它是一个开源的应用程序,这并不意味着你也需要分享你的私钥。 这会破坏整个概念。

开放源代码意味着你用一些许可共享代码。 只要符合许可证规定,许可人对此不做任何处理。 如果他们想在自己的域名下使用自己的软件实例,他们不得不创build自己的证书(在他们的域名下)。

我也可以以某种方式在网站上散列密码,然后把散列发送给服务器,但是我认为这也不是安全的最高标准,是吗? 考虑到没有SSL会导致更多的弊端,而不仅仅是更糟糕/没有encryption。

这不是解决办法,因为你现在把你想保护的东西改成别的东西。 该模型不会因为您在客户端上散列而改变。 现在,您需要保护传输通道上的散列,这与发送密码之前实际上存在相同的问题。

目前我正在开发一个Node.js的web服务器应用程序,然后我想提供下载和使用。 这个应用程序应该具有帐户,以便您可以login您的帐户在服务器创build的网站上。

联合帐户

如果您希望跨多个由不同方托pipe的应用程序实例的联合帐户。

您可以将OpenID作为所有应用程序实例的身份提供者。 然后,您可能要求用户使用已知的OpenID提供程序,或者设置您自己的默认提供程序。 您可以将您的提供程序的代码作为开源发布,但应用程序无需运行。

如果OpenID界面不够用,总有一种方法可以在应用程序的实例之间build立配对关系。 你将不得不build立一个接口,不同的实例可以共享数据。

未连接的实例

如果这只是为了确保没有SSL / TLS的通信,那么我必须说,这在一般意义上是不可能的。

但是,您可以让每个学生亲自注册并在客户端和服务器上使用该密码来派生共享密钥(即AES)。 然后你可以使用CryptoJS来encryptionAES的所有内容,并使用AJAX发送它。 问题当然是(1)必须有一个人来处理注册,并且(2)这对于中间人攻击是脆弱的,因为JavaScriptencryption是不好的 。

好消息是Let's Encrypt很快就会上线。 它将启用半自动的方式为您的域请求免费的证书。 这将是如此简单,你可以做到这一点,正常的NPM安装工作stream程的一部分。

http://letsencrypt.org对此很有帮助 ,现在可以使用了(我知道我对这个有点晚了)。

您可以查看https://github.com/DylanPiercey/auto-sni以获得自动化的Letsencrypt证书。