2012-01-18 5 views
0

Мне нужно развернуть программное обеспечение для n клиентов, которые установят сертификат и будут использовать его. Я не хочу разворачивать два файла (.pfx и exe) только один (.exe, который будет содержать .pfx).Приложить сертификат .pfx к файлу exe

Что я сейчас делаю, это импорт сертификата из местоположения.

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

Возможно ли это?

ответ

10

Вы всегда можете вставлять данные сертификата в качестве ресурса.

Предупреждение: если кто-то получает исполняемый файл, они могут легко вытащить файл PFX.

Можете ли вы надежно распространять исполняемый файл?

Вот некоторые грубые шаги, дистиллированный из: http://www.spikezilla-software.com/blog/?p=24

  • Добавить PFX в проект. Затем один раз нажмите на файл, и в окне свойств установите Build Action на 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"); 
+0

Благодарим вас за ответ. Вы заметили проблему, exe является общедоступной, поэтому любой может ее получить. Тогда как я могу безопасно распространять сертификат? – DropTheCode

+0

Мне очень жаль, что у меня не было хорошего ответа для вас здесь. Возможно, стоит опубликовать вторичный вопрос «Как безопасно распространять файлы PFX» – jglouie

+0

Хорошо, я сделаю это. Спасибо. – DropTheCode

0

Это работало для меня, как только я его встроил.

byte[] cert = Properties.Resources.nameOfCertificate; 
X509Certificate2 x509 = new X509Certificate2(); 
x509.Import(cert, "password", X509KeyStorageFlags.MachineKeySet); 
Смежные вопросы