Visual studio 将.pfx证书附加到exe文件

Visual studio 将.pfx证书附加到exe文件,visual-studio,c++-cli,certificate,exe,x509certificate2,Visual Studio,C++ Cli,Certificate,Exe,X509certificate2,我必须将软件部署到n个客户端,这些客户端将安装并使用证书。我不想部署两个文件(.pfx和exe),只部署一个(.exe,其中包含.pfx) 我现在要做的是从一个位置导入证书 X509Certificate2^ x509 = gcnew X509Certificate2; x509->Import( "C:\\Tmp\\certficate.pfx" ); 可能吗 您始终可以将证书数据作为资源嵌入 不过有一个警告:如果有人得到了可执行文件,他们可以很容易地取出PFX文件 您是否能够安全地分

我必须将软件部署到n个客户端,这些客户端将安装并使用证书。我不想部署两个文件(.pfx和exe),只部署一个(.exe,其中包含.pfx)

我现在要做的是从一个位置导入证书

X509Certificate2^ x509 = gcnew X509Certificate2;
x509->Import( "C:\\Tmp\\certficate.pfx" );

可能吗

您始终可以将证书数据作为资源嵌入

不过有一个警告:如果有人得到了可执行文件,他们可以很容易地取出PFX文件

您是否能够安全地分发可执行文件

以下是一些粗略的步骤,从中提炼:

  • 将PFX添加到项目中。然后在文件上单击一次,并在属性窗口中,将构建操作设置为Embedded Resource
  • 读取嵌入的PFX文件并导入证书
这是C#,但您应该能够非常轻松地转换为C++/CLI:

var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MyFile.pfx");
var bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
var cert = new X509Certificate2(bytes, "certPassword");

一旦我嵌入它,它就对我起作用了

byte[] cert = Properties.Resources.nameOfCertificate;
X509Certificate2 x509 = new X509Certificate2();
x509.Import(cert, "password", X509KeyStorageFlags.MachineKeySet);

谢谢你的回答。您发现了一个问题,exe是公共的,因此任何人都可以拥有它。那么我如何才能安全地分发证书呢?我真希望我在这里能给你一个好的答案。发布第二个问题“如何安全地分发PFX文件”可能值得一提。分发私钥最安全的方法是让用户生成一个私钥;您根据自己的需要分发公钥,他们根据自己的需要生成私钥,然后您的公钥可以用于安全地向您发送他们的公钥。如果您只想验证许可证密钥或类似数据,那么他们应该只需要您的公钥;您的私钥在用于生成许可证的服务器上保持安全。@ThomasS.Trias如果用户生成自己的密钥,服务器如何知道客户端是谁?任何人都可以下载OpenSSL并在任何字段中创建包含信息的客户端证书,对吗?@jgluie这是正确的;为了验证发送者的身份,您需要密钥交换的一些其他身份验证因素。请注意,这只需要在密钥交换期间使用,因为之后可以通过证书验证身份。如果他们的私钥没有被泄露,旧证书也可以用来更新证书,以防过期,但我会坚持使用第二种形式的身份验证。