Что происходит, когда истекает срок действия сертификата подписи кода?

Я рассматриваю возможность приобретения сертификата для подписи кода у VeriSign или Thawte, чтобы подписать XBAP. У меня такой вопрос: что произойдет, когда истечет срок действия этого сертификата? $ 299 и $ 599 - довольно здоровенные цены для 1-летних / 2-летних сертификатов, и если мне придется доставлять подписанную сборку своим клиентам, когда истекает срок действия моего сертификата, тогда я просто справлюсь с проблемой создания собственного сертификата для сейчас.

Что мне не нравится в создании моего собственного сертификата, так это трудность его распространения на все клиентские машины, которые будут использовать мой XBAP. Мое приложение будет использоваться только в локальной сети, поэтому я полагаю, что всегда могу использовать установщик Windows для установки своего домашнего сертификата (хотя я не уверен, как это сделать - у кого-нибудь есть идеи?).

Это не было бы проблемой, если бы я поставлял приложение с частичным доверием - но моему приложению нужны веб-разрешения, поскольку оно будет взаимодействовать со службами WCF, поэтому оно находится в этой серой области между частичным доверием и полным доверием, и без сертификат, я получаю это забавное сообщение "Доверие не предоставлено", когда я пытаюсь загрузить свой XBAP.

Есть идеи?

9 ответов

Решение

Что вы должны сделать, если планируете использовать его в закрытой (LAN) среде, - это настроить свой собственный CA. Версии Windows Server включают в себя простой в использовании центр сертификации, но еще проще настроить минимальный CA с помощью demoCA, предоставляемого openssl, который состоит из нескольких скриптов. Вы можете запустить openssl demoCA в Cygwin под Windows или непосредственно. Эта demoCA состоит из нескольких сценариев perl / bash, которые вызывают команды openssl для генерации запросов, подписания сертификатов / crls и т. Д.

Когда у вас есть собственный CA, вам нужно установить корневой сертификат CA, чтобы больше не возникало проблем с обновлением пользовательских сертификатов, поскольку сертификат CA останется прежним. Обычно сертификат CA должен длиться 5-10 лет, но вы можете настроить столько, сколько хотите (помните, что это ваш собственный CA).

Сертификат CA будет установлен на каждом клиентском компьютере. Если ваше приложение доверяет системе безопасности Windows, оно должно быть установлено в хранилище ключей центров сертификации IExplorer. Если вы используете Java-приложение, вы должны распространять сертификат CA внутри хранилища ключей Java, которое вы используете.

Если вы отметили время своего кода, когда сертификат действителен, это значит, что ваши сертификаты с истекшим сроком годны.

Часто задаваемые вопросы по сертификату подписи кода Thawte:

Как долго я могу использовать сертификат подписи кода?

  • Сертификаты подписи кода действительны в течение 1 или 2 лет, в зависимости от того, какой жизненный цикл вы выберете при покупке сертификата. Обратите внимание: для Microsoft® Authenticode® (многоцелевой) вы также должны пометить метку времени подписанным кодом, чтобы избежать истечения срока действия кода по истечении срока действия сертификата.

Действителен ли код с меткой времени после истечения срока действия сертификата подписи кода?

  • Microsoft® Authenticode® (многоцелевой) позволяет вам ставить метку времени для вашего подписанного кода. Отметка времени гарантирует, что срок действия кода не истечет после истечения срока действия сертификата, поскольку браузер проверяет отметку времени. Сервис меток времени предоставляется VeriSign. Если вы используете службу меток времени при подписании кода, хэш вашего кода отправляется на сервер VeriSign для записи метки времени для вашего кода. Программное обеспечение пользователя может различать код, подписанный сертификатом с истекшим сроком действия, которому нельзя доверять, и код, который был подписан сертификатом, который действовал на момент подписания кода, но впоследствии истек.

Остерегайтесь сертификатов с установленным WTD_LIFETIME_SIGNING_FLAG: Это означает (несмотря на то, что вы думаете против имени), что программа, подписанная сертификатом, недействительна после истечения срока действия сертификата, даже если программа не изменилась, и сертификат был действительным, когда он был подписан.

Это также влияет на обновления, так как даже если клиент установит флажок для доверия всем программам вашей компании, если ваша программа обновлений не подписана с тем же сертификатом (или срок действия этого сертификата истекает), доверие перестает работать.

От: http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/Authenticode_PE.docx


Обработка меток времени с семантикой подписи времени жизни

Приложения или центры сертификации, которые не хотят, чтобы подписи с метками времени успешно проверялись в течение неопределенного периода времени, имеют два варианта:

• Установите OID подписчика на весь срок службы в сертификате подписи издателя.

Если сертификат подписи издателя содержит OID подписчика времени жизни в дополнение к OID подписи кода PKIX, подпись становится недействительной, когда истекает срок действия сертификата подписи издателя, даже если подпись имеет временную метку. OID подписчика времени жизни определяется следующим образом:

szOID_KP_LIFETIME_SIGNING 1.3.6.1.4.1.311.10.3.13

• Установите WTD_LIFETIME_SIGNING_FLAG в структуре WINTRUST_DATA при вызове WinVerifyTrust.

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

Если издатель отзывает сертификат подписи кода, который содержит OID подписчика времени жизни, или вызывающая сторона WinVerifyTrust устанавливает WTD_LIFETIME_SIGNING_FLAG в структуре WINTRUST_DATA, WinVerifyTrust сообщает, что подпись действительна, если выполняются оба из следующих условий:

• Подпись была помечена до даты отзыва.

• Сертификат подписи все еще находится в пределах срока его действия. По истечении срока действия подпись становится недействительной.


Например: https://forum.startcom.org/viewtopic.php?f=15&t=2215&p=6827&hilit=lifetime+signing

Это серьезная проблема с сертификатами StartSSL. Меня не удивляет, что есть ограничения в сертификате, которые стоят так дешево, но скрывать это ограничение в мелком шрифте или в старом сообщении на форуме вместо того, чтобы ясно указывать в описании продукта, плохой бизнес. Они могут исправить это в будущем, и другие могут иметь или не иметь такое же ограничение, поэтому электронное письмо, которое нужно проверить, прежде чем тратить, может быть разумным.

Угадай, кто не знал, спросить? LOL... да ладно, живи и учись.

Если вы обязательно добавите отметку времени при подписании двоичных файлов, вам не придется переподписывать их по истечении срока действия сертификата. Просто добавьте "/ t http://timestamp.verisign.com/scripts/timstamp.dll" в командную строку signtool, и цифровая подпись всегда будет помечена как действительная, если сертификат не отозван и центр сертификации не является доверенным.

Сертификаты подписи кода причины настолько дороги, что кто-то должен подтвердить, что вы тот, кем вы себя называете. В моем случае они проверили адрес и номер телефона и позвонили мне. Сертификаты Comodo, кажется, немного дешевле, хотя.

Просто была эта проблема. Я нашел в этой статье объяснение и вместе с ответом @BCran решил его. Резюме:

  • Сертификат по умолчанию должен быть действителен во время проверки (когда клиент открывает программу, а не во время компиляции)
  • Чтобы сертификат был действителен вечно, вам необходимо подписать программу с помощью сервера TimeStamping. Это подтверждает, что вы не изменили время своего компьютера и не использовали старый сертификат. Если вы используете сервер TimeStamping, вам не нужно каждый раз отказываться от кода.

Вот как вы бы это сделали в VS.NET 2017, например:

Если URL-адрес не работает, вы можете использовать любую службу, вот несколько URL-адресов, которые работают: /questions/35970404/httptimestampverisigncomscriptstimstampdll-ne-dostupen/35970418#35970418

ОСТОРОЖНО WINDOWS DEFENDER.

Вы никогда не хотите, чтобы срок действия вашего сертификата истек или как можно дольше, что составляет 10 лет.

По истечении срока действия вашего сертификата Windows не распознает заменяющий сертификат как таковой. Ваша заявка идет в конец очереди, как если бы она была подписана совершенно другой организацией.

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

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

Это не проблема для локально используемого программного обеспечения, но большая проблема, если вы хотите широко распространять свое программное обеспечение.

BCran писал: «Причина, по которой сертификаты для подписи кода стоят так дорого, заключается в том, что кто-то должен подтвердить, что вы тот, за кого себя выдаете».

Назовите меня глупым, но кто-нибудь думал о том, что разработчики могут самостоятельно вычислять точный размер своих исполняемых приложений во время сборки и включать ли личность разработчика в вычисляемое число, вставьте хеш-число в зашифрованную форму с приложением и решить, следует ли ограничить время приложения или заставить его работать вечно (поскольку исполняемый код, уже находящийся на компьютере пользователя, вряд ли испортится или изменится сам по себе через 1, 3, 5, 10 , 100, 1 миллион лет)?

Кроме того, не имеет значения, сможет ли кто-то подтвердить ваш номер телефона и/или адрес. Эти вещи могут очень легко измениться, если выберет разработчик, но не код приложения.

Преимущество: разработчику ничего не стоит выполнить эту задачу. В то же время пользователи по-прежнему могут быть уверены в действительном и безопасном приложении до тех пор, пока они хотят его использовать (или разрешено использовать его разработчиком), и приложение остается нетронутым. Или крупные игроки, такие как Apple и Microsoft, а также эмитенты сертификатов, должны уговорить разработчиков согласиться постоянно платить за эту услугу?

ПРИМЕЧАНИЕ. Мое наивное и оригинальное понимание приложения с подписью кода состоит в том, чтобы предотвратить несанкционированное вмешательство в код приложения кем-либо. Но чем больше я смотрю на это, тем больше кажется, что это возможность для сторонних лиц и организаций зарабатывать деньги на разработчиках, на богатых и не очень. Хорошо, кто-то должен сделать работу, пытаясь выяснить, кто вы есть. Но огромные различия в ценах, которые я вижу в Интернете на эту услугу, и такой большой акцент на периоды в 1 или 3 года без возможности использования приложения с бессрочной подписью предполагает, что у нас есть люди с очень дорогими офисами в городе, чтобы оплачивать свои услуги. арендная плата и их огромные зарплаты.

Почему бы разработчикам не потребовать от Apple и Microsoft решения по обеспечению безопасности, которые были бы гораздо более удобными для карманов разработчиков и такими же надежными и безопасными для пользователей? Или укажите точный размер в байтах окончательного файла установщика на веб-сайте разработчика во время загрузки, чтобы пользователи могли его проверить. Любого дополнительного или потерянного байта должно быть достаточно, чтобы сообщить пользователям о наличии проблемы. Заставьте разработчиков иметь свой собственный веб-сайт, чтобы каждый мог видеть, кто они и где можно получить законную и неподдельную копию программного обеспечения, и положить конец сайтам загрузки программного обеспечения, которые захватывают копии программного обеспечения разработчика для загрузки со своих сайтов. Все надо делать с сайта разработчика и больше нигде.

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

Вы можете настроить Центр сертификации (ЦС) - придерживайтесь ЦС на базе Windows, если вы работаете только в магазине, но в противном случае я бы порекомендовал Linux с чем-то вроде системы сертификатов DogTag.

Обратите внимание, что если вы создаете свой собственный CA, вам нужно будет экспортировать общедоступный сертификат CA и установить его (так как он является доверенным корневым CA) на любой сервер, на котором будут выполняться код / ​​сценарии, подписанные сертификатом подписи кода, выданным этим сертификатом. CA. Это намного, намного дешевле (бесплатно?) По сравнению с оплатой сертификата каждые X лет - не говоря уже о других сертификатах, которые вы можете выдавать по разным причинам / применениям!

Вам следует избегать временных отметок процесса подписания или временных отметок, пока он находится в пределах срока действия сертификата. Такие инструменты, как Sign PE и другие, позволяют контролировать эти параметры

Другие вопросы по тегам