Przetłumaczę artykuł napisany przez Jamesa Bottomleya , doradcę technicznego Linux Foundation , który podjął się stworzenia pre-bootloadera, umożliwiającego uruchomienie Linuksa.
Jak wyjaśniłem w poprzednim poście, mamy już gotowy kod pre-bootloadera Linux Foundation. Wystąpiło jednak opóźnienie w dostępie do systemu podpisywania Microsoftu.
Pierwszą rzeczą, którą musisz zrobić, to zapłacić opłatę w wysokości 99 USD firmie Verisign (obecnie Symantec) i uzyskać klucz zweryfikowany przez Verisign. Zrobiliśmy to dla Linux Foundation, a oni chcą tylko zadzwonić do centrali, aby to zweryfikować. Klucz jest zwracany za pośrednictwem adresu URL, który instaluje się w przeglądarce, ale można użyć standardowych narzędzi Linux SSL do jego wyodrębnienia i utworzenia standardowego certyfikatu PEM oraz klucza. Nie ma to nic wspólnego z podpisywaniem UEFI, ale służy do weryfikacji w systemie sysdev firmy Microsoft , że jesteś tym, za kogo się podajesz. Zanim utworzysz konto sysdev, musisz je przetestować , podpisując dostarczony przez nich plik wykonywalny i przesyłając go . Mają ścisłe wymagania, aby podpisać go na określonej platformie Windows, ale sbsign przynajmniej zadziałał i bingo, nasze konto zostało utworzone.
Po utworzeniu konta nadal nie można przesyłać plików binarnych UEFI do podpisu bez uprzedniego podpisania papierowej umowy . Umowy są bardzo uciążliwe i zawierają wiele wykluczonych licencji (w tym wszystkie licencje GPL dla sterowników, ale nie dla bootloaderów). Najbardziej uciążliwe jest to, że umowy zdają się wykraczać poza podpisywane obiekty UEFI . Prawnicy Linux Foundation doszli do wniosku, że jest to w większości nieszkodliwe dla LF, ponieważ nie sprzedajemy produktów, ale może być nie do przyjęcia dla innych firm. Według Matthew Garretta, Microsoft jest skłonny negocjować specjalne umowy z dystrybucjami, aby złagodzić niektóre z tych problemów.
Po podpisaniu umów zaczyna się prawdziwa techniczna zabawa . Nie można po prostu przesłać pliku binarnego UEFI i oczekiwać, że zostanie podpisany. Najpierw trzeba go umieścić w pliku .cab . Na szczęście istnieje projekt open source, który umożliwia tworzenie plików cab o nazwie lcab. Następnie należy podpisać plik .cab kluczem Verisign . I znowu, istnieje inny projekt open source, który to umożliwia: osslsigncode. Dla każdego, kto potrzebuje tych narzędzi, są one dostępne w moim repozytorium usługi kompilacji openSUSE UEFI. Ostatnią przeszkodą jest to, że przesłanie pliku wymaga Silverlight . Niestety, Moonlight wydaje się nie działać, a nawet w wersji zapoznawczej 4 pole przesyłania jest puste, więc czas użyć systemu Windows 7 na maszynie wirtualnej opartej na jądrze (KVM). W tym momencie należy również potwierdzić, że plik binarny „aby został podpisany, nie może być objęty licencją GPLv3 ani podobnymi licencjami open source ”. Zakładam, że wynika to ze strachu przed ujawnieniem klucza, ale nie jest to wcale jasne (to samo dotyczy „podobnych licencji open source”).
Po zakończeniu przesyłania plik CAB przechodzi przez siedem etapów. Niestety, pierwsze testowe przesyłanie zatrzymało się na etapie 6 (etapie podpisywania pliku). Po sześciu dniach wysłałem e-mail do wsparcia Microsoftu z pytaniem, co się dzieje. Odpowiedź: „Kod błędu zwrócony przez proces podpisywania wskazuje, że plik nie jest prawidłową aplikacją Win32 . Czy to prawidłowa aplikacja Win32?”. Odpowiedź: Oczywiście, że nie, to prawidłowy 64-bitowy plik binarny UEFI. Nie było dalszych odpowiedzi …
Spróbowałem ponownie. Tym razem otrzymałem e-mail z prośbą o pobranie podpisanego pliku, ale na pulpicie pojawił się komunikat o niepowodzeniu podpisywania . Pobrałem plik i zweryfikowałem go. Plik binarny działa na platformie Secure Boot i jest podpisany kluczem.
subject = / C = US / ST = Washington / L = Redmond / O = Microsoft Corporation / OU = MOPR / CN = Microsoft Windows UEFI Driver Publisher
emitent = / C = US / ST = Washington / L = Redmond / O = Microsoft Corporation / CN = Microsoft Corporation UEFI CA 2011Zapytałem wsparcie techniczne, dlaczego proces wskazywał błąd, ale pobranie pliku przebiegło prawidłowo. Po lawinie e-maili odpowiedzieli: „Nie używaj tego pliku; został nieprawidłowo podpisany . Odezwę się do Ciebie”. Nadal nie jestem pewien, na czym polega problem, ale jeśli spojrzeć na temat klucza podpisu, nie ma w nim nic, co wskazywałoby na Linux Foundation . Dlatego podejrzewam, że problem polega na tym, że plik binarny jest podpisany ogólnym kluczem firmy Microsoft, a nie konkretnym (i odwołalnym) kluczem powiązanym z Linux Foundation.
Jednak jest to stan: będziemy nadal czekać, aż Microsoft przekaże Linux Foundation podpisany i zweryfikowany program ładujący przed uruchomieniem. Kiedy tak się stanie, zostanie on przesłany do witryny Linux Foundation do użytku wszystkich.
Źródło: http://blog.hansenpartnership.com/adventures-in-microsoft-uefi-signing/
Wyciągnij wnioski, ale to zajmie trochę czasu.