none
Создание цифровой подписи драйвера для Windows x64 RRS feed

  • Вопрос

  • Здравствуйте, коллеги!
    Просим помощи у сообщества.

    Мы являемся разработчиками ПО, в том числе драйверов для наших устройств.
    Наши драйвера без проблем работают на 32-битных ОС Windows.
    Но нам необходимо, чтобы наши драйвера работали и под 64-битной версией ОС Windows.
    Сразу сообщаем: в тестовом режиме без требований цифровой подписи драйвер работает без нареканий.

    В связи с этим приобрели сертификат Symantec Code Signing Certificate (VeriSign Class 3 Code Signing).

    Все свои действия выполняем согласно

    0. http://msdn.microsoft.com/en-us/windows/hardware/gg487317
    1. http://msdn.microsoft.com/en-us/windows/hardware/gg487315
    2. http://msdn.microsoft.com/en-us/windows/hardware/gg487328
    3. https://knowledge.verisign.com/support/code-signing-support/index?page=content&id=SO16958
    4. https://knowledge.verisign.com/support/code-signing-support/index?page=content&id=AR1739
    5. https://knowledge.verisign.com/support/code-signing-support/index?page=content&id=SO15544

    Вот наши действия:

    1. Запускаем среду WDK

    2. Создаем *.CAT файл командой

        >Inf2cat /driver:c:\wdk\src\_Bt\v22s\objfre_win7_amd64\amd64 /os:7_X64 /v

    Получаем:
    Inf2cat /driver:c:\wdk\src\_Bt\v22s\objfre_win7_amd64\amd64 /os:7_X64 /v
    Processing directory (c:\wdk\src\_Bt\v22s\objfre_win7_amd64\amd64\) file (bt_v.cat)
    Processing directory (c:\wdk\src\_Bt\v22s\objfre_win7_amd64\amd64\) file (bt_v.inf)
    Processing directory (c:\wdk\src\_Bt\v22s\objfre_win7_amd64\amd64\) file (bt_v.obj)
    Processing directory (c:\wdk\src\_Bt\v22s\objfre_win7_amd64\amd64\) file (bt_v.obj.oacr.wdksamples.amd64fre.pft.xml)
    Processing directory (c:\wdk\src\_Bt\v22s\objfre_win7_amd64\amd64\) file (bt_v.pdb)
    Processing directory (c:\wdk\src\_Bt\v22s\objfre_win7_amd64\amd64\) file (bt_v.res)
    Processing directory (c:\wdk\src\_Bt\v22s\objfre_win7_amd64\amd64\) file (bt_v.sys)
    Processing directory (c:\wdk\src\_Bt\v22s\objfre_win7_amd64\amd64\) file (cc.bat)
    Processing directory (c:\wdk\src\_Bt\v22s\objfre_win7_amd64\amd64\) file (cs.bat)
    Processing directory (c:\wdk\src\_Bt\v22s\objfre_win7_amd64\amd64\) file (cv.bat)
    Processing directory (c:\wdk\src\_Bt\v22s\objfre_win7_amd64\amd64\) file (vc90.pdb)
    Processing directory (c:\wdk\src\_Bt\v22s\objfre_win7_amd64\amd64\) file (wdfcoinstaller01009.dll)
    Processing directory (c:\wdk\src\_Bt\v22s\objfre_win7_amd64\amd64\) file (_objects.mac)
    Parsing INF: c:\wdk\src\_Bt\v22s\objfre_win7_amd64\amd64\bt_v.inf
    Finished parsing INFs
    Processing INF: c:\wdk\src\_Bt\v22s\objfre_win7_amd64\amd64\bt_v.inf
    Finished processing INFs
    Testing driver package...
    Testing driver package...
    Testing driver package...
    Testing driver package...
    Testing driver package...
    Testing driver package...
    Testing driver package...
    Testing driver package...
    Testing driver package...
    Testing driver package...
    Testing driver package...
    Testing driver package...
    Testing driver package...
    Testing driver package...

    Signability test complete.

    Errors:
    None

    Warnings:
    None

    Catalog generation complete.
    c:\wdk\src\_Bt\v22s\objfre_win7_amd64\amd64\bt_v.cat

    3. Далее подписываем *.CAT файл командой

        >SignTool sign /v /ac "C:\MSCV-VSClass3.cer" /s "My" /n "#### ####" /t http://timestamp.verisign.com/scripts/timestamp.dll %1%

    C:\WDK\src\_bt\v22s\objfre_win7_amd64\amd64>cs bt_v.cat

    C:\WDK\bin\x86\SignTool sign /v /ac "C:\MSCV-VSClass3.cer" /s "My" /n "#### ####" /t http://timestamp.verisign.com/scripts/timestamp.dll bt_v.cat
    The following certificate was selected:
        Issued to: #### ####
        Issued by: VeriSign Class 3 Code Signing 2010 CA
        Expires:   Sun May 31 03:59:59 2015
        SHA1 hash: D33ABDB727C6133781C11C5E2B3C1CCC01B659CA

    Cross certificate chain (using machine store):
        Issued to: Microsoft Code Verification Root
        Issued by: Microsoft Code Verification Root
        Expires:   Sat Nov 01 17:54:03 2025
        SHA1 hash: 8FBE4D070EF8AB1BCCAF2A9D5CCAE7282A2C66B3

            Issued to: VeriSign Class 3 Public Primary Certification Authority - G5
            Issued by: Microsoft Code Verification Root
            Expires:   Mon Feb 22 23:35:17 2021
            SHA1 hash: 57534CCC33914C41F70E2CBB2103A1DB18817D8B

                Issued to: VeriSign Class 3 Code Signing 2010 CA
                Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
                Expires:   Sat Feb 08 03:59:59 2020
                SHA1 hash: 495847A93187CFB8C71F840CB7B41497AD95C64F

                    Issued to: #### ####
                    Issued by: VeriSign Class 3 Code Signing 2010 CA
                    Expires:   Sun May 31 03:59:59 2015
                    SHA1 hash: D33ABDB727C6133781C11C5E2B3C1CCC01B659CA

    Done Adding Additional Store
    Successfully signed and timestamped: bt_v.cat

    Number of files successfully Signed: 1
    Number of warnings: 0
    Number of errors: 0

    4. Далее проверяем подписанный драйвер командой

        >signtool verify /v /kp %~1%

    C:\WDK\bin\amd64\signtool verify /v /kp bt_v.cat

    Verifying: bt_v.cat
    Hash of file (sha1): 0FF7D0BEDE5CF1BA86320B36746D794157E062AA

    Signing Certificate Chain:
        Issued to: Class 3 Public Primary Certification Authority
        Issued by: Class 3 Public Primary Certification Authority
        Expires:   Thu Aug 03 03:59:59 2028
        SHA1 hash: A1DB6393916F17E4185509400415C70240B0AE6B

            Issued to: VeriSign Class 3 Public Primary Certification Authority - G5
            Issued by: Class 3 Public Primary Certification Authority
            Expires:   Mon Nov 08 03:59:59 2021
            SHA1 hash: 32F30882622B87CF8856C63DB873DF0853B4DD27

                Issued to: VeriSign Class 3 Code Signing 2010 CA
                Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
                Expires:   Sat Feb 08 03:59:59 2020
                SHA1 hash: 495847A93187CFB8C71F840CB7B41497AD95C64F

                    Issued to: #### ####
                    Issued by: VeriSign Class 3 Code Signing 2010 CA
                    Expires:   Sun May 31 03:59:59 2015
                    SHA1 hash: D33ABDB727C6133781C11C5E2B3C1CCC01B659CA

    The signature is timestamped: Fri Jun 21 18:00:02 2013
    Timestamp Verified by:
        Issued to: Thawte Timestamping CA
        Issued by: Thawte Timestamping CA
        Expires:   Fri Jan 01 03:59:59 2021
        SHA1 hash: BE36A4562FB2EE05DBB3D32323ADF445084ED656

            Issued to: Symantec Time Stamping Services CA - G2
            Issued by: Thawte Timestamping CA
            Expires:   Thu Dec 31 03:59:59 2020
            SHA1 hash: 6C07453FFDDA08B83707C09B82FB3D15F35336B1

                Issued to: Symantec Time Stamping Services Signer - G4
                Issued by: Symantec Time Stamping Services CA - G2
                Expires:   Wed Dec 30 03:59:59 2020
                SHA1 hash: 65439929B67973EB192D6FF243E6767ADF0834E4

    Cross Certificate Chain:
        Issued to: Microsoft Code Verification Root
        Issued by: Microsoft Code Verification Root
        Expires:   Sat Nov 01 17:54:03 2025
        SHA1 hash: 8FBE4D070EF8AB1BCCAF2A9D5CCAE7282A2C66B3

            Issued to: VeriSign Class 3 Public Primary Certification Authority - G5
            Issued by: Microsoft Code Verification Root
            Expires:   Mon Feb 22 23:35:17 2021
            SHA1 hash: 57534CCC33914C41F70E2CBB2103A1DB18817D8B

                Issued to: VeriSign Class 3 Code Signing 2010 CA
                Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
                Expires:   Sat Feb 08 03:59:59 2020
                SHA1 hash: 495847A93187CFB8C71F840CB7B41497AD95C64F

                    Issued to: #### ####
                    Issued by: VeriSign Class 3 Code Signing 2010 CA
                    Expires:   Sun May 31 03:59:59 2015
                    SHA1 hash: D33ABDB727C6133781C11C5E2B3C1CCC01B659CA

    Successfully verified: bt_v.cat

    Number of files successfully Verified: 1
    Number of warnings: 0
    Number of errors: 0

    5. Пытаемся установить подписанный драйвер на ПК с Windows x64 и в итоге получаем при установке: "Windows не может проверить издателя" - ошибка 52.
    Хотя ОС видит, что цифровая подпись у драйвера есть.

    По данному вопросу 3 недеди ведем переписку с Symantec, с Microsoft RUS - положительного результат нет.

    Мы подозреваем, что выданный нам сертификат не может связаться с промежуточными сертификатами Verisign.
    Помогите разобраться... может кто понимает в этой кросс-сертификации.
    Какие есть средства контроля этой кросс-сертификации?
    Что не так установлено в консоли Сертификатов?


    • Изменено cvs_nt 24 июня 2013 г. 10:40 опечатка
    21 июня 2013 г. 14:17

Ответы

  • Установите на Ваше тестовое устройство Корневой сертификат, попробуйте вновь установить Ваш драйвер на тестовое устройство и напишите результат.

    Что из выше перечисленной рекомендации у Вас вызывает затруднение и что Вам непонятно?

    Предполагаю, что Ваша ЭЦП действительна  только на том компьютере, на котором производилось подписание. Установка Корневого сертификата на тестовое устройство, и должно решить эту проблему, вот это я и хотел проверить.

    Политика наших Форумов, не рекомендует публиковать личные электронные адреса. Для обмена файлами-примерами, скриншотами и т.д. как раз и предназначено бесплатное хранилище SkyDrive.


    Да, я Жук, три пары лапок и фасеточные глаза :))




    5 июля 2013 г. 14:56
  • Отвлекитесь и попробуйте себе ответить:

    -как Windows должен проверить сертификат на локальном компьютере без подключения к интернету;

    -должен ли Windows проверять всю цепочку сертификата, или достаточно только одного Корневого. ;)

    У Вас должен быть Публичный сертификат - файл с расширением *.cer, руководствуясь разделом Q9 справки, загрузите Ваш Публичный сертификат в общедоступную папку бесплатного хранилища SkyDrive, скопируйте ссылку на него и вставьте в своё сообщение.

    По приведённой Вами ссылке, расположен список Корневых сертификатов с их отпечатками, для кросс-сертификатов, один из которых Вашего кросс-сертификата. Он и должен быть установлен у Вас, в Доверенные корневые центры сертификации на устройстве, на котором устанавливается Ваш драйвер подписанный Вашей ЭЦП.


    Да, я Жук, три пары лапок и фасеточные глаза :))



Все ответы

  • Дополните Вашу информацию, на устройстве, на котором Вы пробуете установить подписанный Вами драйвер:

    -установлен ли Корневой сертификат;

    -установлены ли списки СОС Промежуточных центров сертификации Вашего сертификата;

    -используется ли для проверки, и настроена ли проверка сертификата по протоколу OCSP.


    Да, я Жук, три пары лапок и фасеточные глаза :))


    • Изменено ЖукMVP 1 июля 2013 г. 13:08 добавление
    1 июля 2013 г. 12:57
  • Мы предполагаем, что подписанного драйверного пакета (*.cat) достаточно для установки драйвера. Разве не так?

    Разве необходимо вместе с драйвером еще поставлять всю цепочку сертификатов? Или мы что-то не понимаем? Тогда где почитать?

    2 июля 2013 г. 13:39
  • И еще:

    на сайте http://msdn.microsoft.com/en-us/windows/hardware/gg487315

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

    как в таком случае быть. А при подписывании сылка идет именно на этот кросс-сертификат. Или мы что-то не понимаем?

    2 июля 2013 г. 13:57
  • Отвлекитесь и попробуйте себе ответить:

    -как Windows должен проверить сертификат на локальном компьютере без подключения к интернету;

    -должен ли Windows проверять всю цепочку сертификата, или достаточно только одного Корневого. ;)

    У Вас должен быть Публичный сертификат - файл с расширением *.cer, руководствуясь разделом Q9 справки, загрузите Ваш Публичный сертификат в общедоступную папку бесплатного хранилища SkyDrive, скопируйте ссылку на него и вставьте в своё сообщение.

    По приведённой Вами ссылке, расположен список Корневых сертификатов с их отпечатками, для кросс-сертификатов, один из которых Вашего кросс-сертификата. Он и должен быть установлен у Вас, в Доверенные корневые центры сертификации на устройстве, на котором устанавливается Ваш драйвер подписанный Вашей ЭЦП.


    Да, я Жук, три пары лапок и фасеточные глаза :))



  • Добрый день. К сожалению не знаю, как к вам обращаться.

    1. Все наши ПК в офисе подключены к Интернет.

    2. Ваш вопрос нам не понятен? Можете пояснить? Мы создаем драйвер для нашего оборудования. В Verisign купили возможность подписывать наше ПО, в том числе и драйвера. Пользуемся WDK. Все выполняем по инструкции. В момент  подписания драйвера как бы все Ок -  никаких error и warning (см. выше) Но в момент установки подписанного нами драйвера возникает ошибка - Windows не может проверить издателя, т.е. нас. Вот в чем проблема.

    3.  ЧТо значит публичный сертификат? Мы получили от Verisign наш сертификат, и еще два их сертификата по инструкции мы скачали с их сайта.

    Про какой SkyDrive вы пишите? Это нам зачем?

    4. Мы думали так: если мы приобрели персональный сертификат для подписывания ПО, в том числе и наших драйверов. Этот сертификат выдала компания Verisign, которой доверяет Microsoft. В соответствии с руководствами KMCS_Walkthrough.doc и best_practices.doc мы подписываем цифровой подписью наш драйвер. Ошибок в процессе не возникает. Берем подписанный драйвер, копируем его на тестовый компьютер. Windwos видит что драйвер подписан, спрашивает доверять ли, отвечаем "Доверять"... и в следующем окне получаем - Windows не может проверить издателя - ошибка 52. Вот мы и спрашиваем, что не так мы делаем. Кто поможет?

    4 июля 2013 г. 13:40
  • Установите на тестовый компьютер Корневой сертификат Вашего кросс-сертификата, попробуйте вновь установить подписанный ЭЦП Ваш драйвер, и напишите результат.

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


    Да, я Жук, три пары лапок и фасеточные глаза :))



    • Изменено ЖукMVP 4 июля 2013 г. 22:36 корректировка
    4 июля 2013 г. 21:09
  • Добрый день.

    Скажите, а тогда зачем нам вся процедура подписывания ПО, если мы вместе с нашим ПО должны еще пользователя просить установить НАШ кросс-сертификат?

    Мы же предполагаем, что в момент подписывания, вся информация о нас как об издателе, заносится в *.CAT файл. Или мы что-то не допонимаем в цифровых сертификатах? Тогда скажите, где почитать, чтобы расставить все точки уже...

    Когда, например, вы устанавливаете драйвер (скажем сетевой карты или VGA, ... ) вы же дополнительно ничего не ставите? Вместе с установкой драйвера Windows проверяет издателя этого ПО, и если всё Ок (по сертификатам), драйвер устанавливается и все работает... При этом в хранилище сертификатов появляется запись в разделе Trusted Publisher (доверенный издатель) о производителе оборудования. которому вы доверяете.

    Про SkyDrive - наш сертификат в полном порядке. Проверять его - не имеет смысла. Мы же пишем про то что в момент процесса подписания драйвера средствами WDK, OS Windows не сообщает пользователю о том, что в хранилище сертификатов для Verisign не все выданные сертификаты корректные.

    Если вам интересно, могу скинуть скриншоты - напишите email

    5 июля 2013 г. 13:34
  • Установите на Ваше тестовое устройство Корневой сертификат, попробуйте вновь установить Ваш драйвер на тестовое устройство и напишите результат.

    Что из выше перечисленной рекомендации у Вас вызывает затруднение и что Вам непонятно?

    Предполагаю, что Ваша ЭЦП действительна  только на том компьютере, на котором производилось подписание. Установка Корневого сертификата на тестовое устройство, и должно решить эту проблему, вот это я и хотел проверить.

    Политика наших Форумов, не рекомендует публиковать личные электронные адреса. Для обмена файлами-примерами, скриншотами и т.д. как раз и предназначено бесплатное хранилище SkyDrive.


    Да, я Жук, три пары лапок и фасеточные глаза :))




    5 июля 2013 г. 14:56
  • У Вас должен быть Публичный сертификат - файл с расширением *.cer, 



    Тоже проблема. Не могу поставить драйвер В Win 10 1909

    В Win 10 1909 При открытии catalog.cat из драйвера,  подписанного в WinXP , пишет сертификат этого каталога недействителен. Предположу что сертификат — файл с расширением *.cer, находиться на WinXP где подписывался драйвер. Видима есть список Корневых сертификатов где есть мой кросс-сертификат. Он и должен быть установлен на Win 10 1909, в Доверенные корневые центры сертификации на устройстве, на котором устанавливается драйвер подписанный ЦП. Если так как это сделать, то есть перенести сертификат на Win 10 1909?

    Или могу я другим способом его установить, например отключив проверку подписи В Win 10 1909? Драйвер проверенный годами в WinXP, я к нему привык, а таких или похожих у производителя уже нет

    12 апреля 2020 г. 14:15