Подтвердить что ты не робот

Как продлить срок действия моего сертификата ClickOnce с истекшим сроком действия?

Мне нужно внести некоторые изменения в приложение ClickOnce, которое я не коснулся более года, и поэтому срок действия сертификата истек.

Я читал, что публикация с новым сертификатом приведет к сбою приложения, потому что он будет подписан другим ключом.

Поэтому я думаю, что мне нужно использовать тот же сертификат, но не уверен, как его обновить.

4b9b3361

Ответ 1

Если вы после быстрого решения, вы можете "обновить" существующий сертификат и просто дать ему более длительный срок действия.

Клифф Стэнфорд очистил "обходной путь" Microsoft и сделал его доступным в виде простой командной строки exe - здесь: http://may.be/renewcert/ - Хорошая работа Клифф!

Ответ 2

Вот окончательная статья MSDN об истечении срока действия сертификата, которая также включает ссылку на обновление на RenewCert. http://msdn.microsoft.com/en-us/library/ff369721.aspx Это охватывает все случаи.

Если вы настроили таргетинг на .NET 3.5, используя автоматические обновления и не имеете приложения VSTO, или вы нацеливаете .NET 4, изменение сертификата не вызовет никаких проблем.

Ответ 3

Обновление: @OceanAirdrop сделал всю работу ниже и сделал ее доступной на github: https://github.com/OceanAirdrop/ExtendClickOnceCertificate, у него есть инструкции по использованию на целевой странице readme.


Оригинальные детали:

Как заявляет @Andy Blackman, обновление pfx - это путь, но когда я пытался его использовать, у renewcert были проблемы с современными окнами. Чтобы исправить зависимости may.be/renewcert, другой парень переписал его на С#, чтобы вы могли использовать его в современной Visual Studio:

https://nathanpjones.com/2013/01/renewing-temporary-certificate/

Загрузите исходный код с его сайта, скомпилируйте и запустите.


Если вы получите "system.accessviolationexception" при сортировке в CertNameToStr для wcslen, то внесите следующие изменения, чтобы сортировка не сработала:

  1. В Crypt.cs: строка 130 измените переменную psz, чтобы использовать char [] вместо строки:

     [DllImport("crypt32.dll", CharSet = CharSet.Auto)]
    -        internal static extern int CertNameToStr(X509Encoding dwCertEncodingType, ref CRYPT_DATA_BLOB pName, CertNameType dwStrType, ref string psz, int csz);
    +        internal static extern int CertNameToStr(X509Encoding dwCertEncodingType, ref CRYPT_DATA_BLOB pName, CertNameType dwStrType, [In, Out] char[] psz, int csz);
    
  2. В Program.cs: строка 131 использует буфер символов вместо строки:

    -                //var buffer = new char[1024];
    -                string buffer = new string('\0', 1024);
    +                char[] buffer = new char[1024];
    +                //string buffer = new string('\0', 1024);
                     int d;
    -                if ((d = Crypt.CertNameToStr(Crypt.X509Encoding.ASN_Encodings, ref certNameBlob, Crypt.CertNameType.CERT_X500_NAME_STR, ref buffer, 1024 * sizeof(char))) != 0)
    +                if ((d = Crypt.CertNameToStr(Crypt.X509Encoding.ASN_Encodings, ref certNameBlob, Crypt.CertNameType.CERT_X500_NAME_STR, buffer, 1024 * sizeof(char))) != 0)
    
  3. перестраивать

Чтобы запустить его, чтобы быстро обновить сертификат на пять лет, используйте команду:

"[path-to-renew-cert-proj-dir\bin\Debug\]renewCert.exe" [old-cert-path\]old_cert_name.pfx [new-cert-path\]new_cert_name.pfx

Ответ 4

Если я правильно помню, я столкнулся с той же проблемой и просто создал новый сертификат.

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

Ответ 5

В основном вам нужно создать приложение, чтобы продлить срок действия вашего сертификата. Ссылки, приведенные выше, приведут вас к исходному коду С++ для приложения. Если вам повезет и просто подписал это самостоятельно, это может сработать. Если вы использовали Verisign и т.д., Чтобы подписать его, вы являетесь SOL. Вам нужно будет удалить и переустановить каждое приложение. Как будто вы покупаете новый автомобиль, который двигается, и производитель дает вам книгу о перестройке двигателей вместо замены или фиксации. ClickOnce нет.