我正在编写一个客户端/服务器应用程序,要求服务器需要能够对客户端进行身份验证,并且还要求对所有通信进行加密。
提供此功能的机制需要自包含在服务器和客户端应用程序中,并且还要完全自动化(无需人工交互)。 SSL似乎是最好的方法,也是我熟悉的使用方法。
对于需要部署到客户端软件的每个客户端,我计划(动态)创建一个带有应用程序的MSI安装程序,客户端证书(由服务器签名)和私钥以及服务器公共证书(所以客户端可以验证服务器 - 服务器证书可以自签名)。
我可以为客户生成密钥并创建CSR,但似乎无法找到实际签署CSR并为客户端生成证书的方法。我查看了Win32加密API,但没有设法找到如何实际签署CSR并获得客户端证书的任何示例。
我知道如何使用openssl工具从命令行执行所有这些操作,但我不确定如何在应用程序中执行此操作。
请注意,让系统调用openssl工具并传入我知道工作的参数不是一个选项,因为依赖openssl工具不会以任何方式受到损害是一个巨大的安全风险。这样做不会填补自己的要求。
我正在以正确的方式解决这个问题,或者是否有更好的方法来实现相同的目标 - 基本上是连接到服务器的客户端的身份验证以及连接客户端对连接到的服务器进行身份验证的方式,所有加密
我不能对具有静态IP或主机名的服务器(或客户端)做任何假设(DNS可能会被破坏),也不能对任何现有的PKI基础设施做出任何假设。
我主要是在C#.Net中写这个,但是如果它给我这个功能的话,会考虑写一个C ++扩展。
最后这是我在这里的第一篇文章,所以如果我错过了一些明显或缺乏任何细节的内容,请询问并填写空白:)
谢谢,
詹姆斯
答案 0 :(得分:1)
在C#中,您可以使用我们的SecureBlackbox产品的PKIBlackbox包,它提供了您在.NET中寻找的所有功能。也许BouncyCastle库也包含此功能。
答案 1 :(得分:1)
您需要重新考虑至少部分内容。你在做什么是根本不安全。客户端的私钥需要在客户端生成。否则它不是私有的,因此它不可能满足PKI的任何原则。包括您发布它的目的。你失去了独特性,你也失去了不可否认性。这些都是致命的缺陷。