gpt4 book ai didi

ssl - 将OpenSSL添加到现有应用中

转载 作者:太空宇宙 更新时间:2023-11-03 12:51:22 25 4
gpt4 key购买 nike

我正在向现有应用程序添加SSL支持(当前正在使用OpenSSL推进)。在阅读大量文章和观看视频之前和之后,我从未对密码学做任何事情,对于如何针对特定情况实施密码,我仍然有些困惑。

我们的软件是客户端/服务器,最终用户会同时购买和安装它们。

我的第一困惑是关于证书和私钥,以及如何管理它们。我是否应该拥有一个随应用程序一起安装的证书?每个最终用户都应生成自己的证书吗?那私钥呢?是否将私钥烘焙到服务器二进制文件中?还是应该有一个包含私钥的文件?

我确定这是一个已解决的问题,但是我不确定在哪里寻找或搜索什么。

感谢您的帮助和建议。

最佳答案

将OpenSSL添加到现有应用中


如果您只需要一个SSL / TLS客户端示例,请查看OpenSSL的Wiki和TLS Client示例。




  我的第一困惑是关于证书和私钥,以及如何管理它们。


是的,密钥管理和分发是crpyto中最难的问题。

公共CA具有涵盖这些做法的具有法律约束力的文件。它们称为认证实践声明(CPS)。您可以和他们一起玩很多,因为公司律师会告诉您您不想听的内容(或者市场部门拒绝告诉您)。

例如,以下是Apple Inc. Certification Authority Certification Practice Statement的摘录:

2.4.2. CA disclaimers of warranties
To the extent permitted by applicable law, Subscriber agreements,
if applicable, disclaim warranties from Apple, including any
warranty of merchantability or fitness for a particular purpose.

2.4.3. CA limitations of liability
To the extent permitted by applicable law, Subscriber agreements,
if applicable, shall limit liability on the part of Apple and shall
exclude liability for indirect, special, incidental, and
consequential damages.


因此,Apple向您出售的产品没有保修,并且不承担任何责任!!!他们希望您信任他们并给他们钱……真是个球拍!而且它不仅是苹果公司-其他CA也同样具有令人讨厌的CPS。




  我是否应该拥有一个随应用程序一起安装的证书?


这取决于。如果您正在运行自己的PKI(即您是CA,并且控制根证书),则将根X509证书与您的应用程序一起分发,而不分发其他任何东西。无需信任任何其他CA,例如Verisign或Startcom。

如果使用的是他人的PKI(或RFC 5280中指定的Internet的PKI),则仅分发验证链所需的根X509证书。在这种情况下,您将分发一个CA的根X509证书以进行验证。但是,您几乎可以信任由该特定CA签名的任何证书(如果不小心,证书的信任度可能高达千分之十)。

如果您不事先知道,那么您就必须像浏览器一样,选择一堆CA来信任并为您的应用程序携带其根证书。例如,您可以从Mozilla抓取它们的列表。但是,您几乎可以信任所有CA签署的任何证书(如果不小心,证书的信任度可能会达到千分之十)。

使用诸如浏览器之类的公共CA还有很多,您应该通读Peter Gutmann的 Engineering Security。特别注意安全性多元化策略。

当客户端连接到您的服务器时,您的服务器应将其X509证书(叶证书)和构建有效链所需的所有中间证书发送回您分发的根证书。

最后,您可以从 Startcom的Eddy Nigg获得免费的SSL / TLS证书,这些证书受到大多数主流浏览器(包括移动设备)的信任。他收取撤销费用(如果需要),因为这就是费用所在。其他CA会预先向您收取费用,如果不需要,可以将收益收入囊中。




  每个最终用户都应生成自己的证书吗?


这也是可能的。这称为客户端证书或客户端身份验证。理想情况下,您将运行自己的PKI,因为(1)您控制一切(包括CA操作)并且不需要信任组织外部的任何人; (2)让商业CA签署每个用户的证书可能会变得昂贵。

如果您不想使用客户端证书,请查看PSK(预共享密钥)和SRP(安全远程密码)。两者都使用RSA密钥传输击败了经典X509。 PSK和SRP之所以这样做,是因为它们提供了相互身份验证和通道绑定。在这些系统中,客户端和服务器都知道机密或密码,并且通道已建立。或其中一个(或两者都不知道)并且通道设置失败。纯文本用户名和密码永远不会像RSA传输和 basic_auth方案中那样放在网上。 (我更喜欢SRP,因为它基于Diffie-Hellman,并且已经在一些系统中实现了)。




  那私钥呢?


是的,您需要管理与证书关联的私钥。您可以(1)使用权限或ACL将它们存储在文件系统中; (2)将其存储在Android,Mac OS X,iOS或Windows等Keystore或Keychain中; (3)将它们存储在硬件安全模块(HSM)中;或(4)远程存储它们,同时使用 Key Management Interop Protocol(KMIP)使它们保持联机。

注意:服务器上无人值守的密钥存储是无法解决的问题。例如,参见Peter Gutmann的 Engineering Security,第368页,“邪恶的难题”和“没有解决方案的问题”。




  是否将私钥烘焙到服务器二进制文件中?


不。您可以在需要时生成它们,然后以可以提供的最佳保护对其进行存储。




  还是应该有一个包含私钥的文件?


是的,类似的东西。往上看。




  我确定这是一个已解决的问题,但是我不确定在哪里寻找或搜索什么。


由于密钥分发问题,我不确定是否真的可以解决它。

而且某些实现真的很糟糕,因此您可能想知道代码如何传递到生产环境。

您可能想要的第一件事(因为您专注于密钥管理)是对“密钥管理”和“密钥层次结构”的处理。

您可能还需要一些参考资料。从安全工程的角度,阅读Gutmann的 Engineering Security和Ross Anderson的 Security Engineering。从实现的角度来看,获取 Network Security with OpenSSLSSL and TLS: Designing and Building Secure Systems的副本。

关于ssl - 将OpenSSL添加到现有应用中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20957145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com