Pull to refresh

История о том, как Джеймс Боттомли из Linux Foundation пытался подписать в Microsoft загрузчик для UEFI secure boot

Reading time3 min
Views38K
Железо, сертифицированное в Microsoft, как совместимое с Windows 8, обязательно должно поддерживать технологию «безопасной загрузки» UEFI secure boot, которая не позволяет загружать неподписанный код. Это создаёт большие проблемы всем, кто захочет поставить на сертифицированное железо отличную от Windows ОС. Консорциум Linux Foundation в октябре этого года объявил о том, что все дистрибутивы Linux смогут воспользоваться универсальным предзагрузчиком, который будет подписан корпорацией Microsoft и позволит относительно безболезненно загружать альтернативные системы.

Загрузчик давно написан и отлажен, но пока что не подписан Microsoft. Почему? Путь к получению заветного сертификата с ключом оказался необычайно длинным и тернистым. О том, как это происходило, рассказывает в своём блоге член совета Linux Foundation Джеймс Боттомли.

Чтобы подписать загрузчик, нужно зарегистрироваться в центре сертификации системного ПО Microsoft (sysdev), а для этого надо иметь подписанный Verisign сертификат, подтверждающий, что вы — это вы. Цена сертификата — 99 долларов США. При создании аккаунта в sysdev надо подписать присланный Microsoft исполняемый файл ключом из сертификата. Только после этого аккаунт активируется.

После этого нужно подписать бумажный договор, который, среди множества прочих условий, запрещает подписывать код под копилефтными лицензиями (GPL и подобные). Изучив документ, юристы Linux Foundation пришли к выводу, что он в основном безвреден в этом конкретном случае, но вообще-то говоря, может создавать проблемы тем, кто хочет подписать что-то более серьёзное, чем маленький загрузчик.

После этого начинается сам процесс подписывания. Но вы не можете просто так взять, и загрузить любой исполняемый файл! Он обязательно должен быть упакован в контейнер Microsoft Cabinet. К счастью, программа lcab позволяет сделать это под Linux. Затем упакованный файл должен быть подписан ключом Verisign, что можно сделать с помощью osslsigncode. Загрузчик файлов написан на Silverlight, и никакой Moonlight не помогает. Так что Джеймсу Боттомли пришлось загружать файл из-под в виртуальной Windows 7. Непосредственно перед началом загрузки необходимо ещё раз подтвердить, что исполняемый файл не лицензируется по GPLv3 или другой подобной лицензии.

После загрузки происходит обработка файла, состоящая из семи этапов. Первая попытка загрузки зависла на этапе №6 — «подписывание файлов». Письмо в службу поддержки Microsoft через 6 дней ожидания выявило, что процесс подписания прервался с ошибкой, сообщающей, что подписываемый код не является корректным приложением Win32. На замечание Боттомли, что это корректный 64-битный исполняемый код для UEFI, и довольно странно требовать от него совместимости с Win32, служба поддержки не ответила.

Тем не менее, со второй попытки файл удалось каким-то образом загрузить. В почтовый ящик Linux Foundation пришёл подписанный загрузчик, который нормально работал на компьютере с включенным secure boot, но сайт Microsoft сообщил, что подписать файл не удалось.

Озадаченный Джеймс Боттомли ещё раз написал в службу поддержки, и получил ответ, что файл использовать нельзя, потому что он подписан «некорректно», и надо ждать дальнейших указаний. Боттомли предполагает, что проблема в том, что файл подписан универсальным (неотзываемым) ключом Microsoft для производителей драйверов UEFI, а не отдельным ключом для Linux Foundation.

Пока что на этом процесс остановился. Linux Foundation опубликует загрузчик на своём сайте, как только Microsoft его подпишет. Первые компьютеры с Windows 8 уже в продаже…

Tags:
Hubs:
+72
Comments148

Articles