Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
appnote:etoken [2016/05/10 22:41]
mcb30
appnote:etoken [2023/08/29 18:39]
mcb30
Line 5: Line 5:
 ==== EV Code Signing Certificate ==== ==== EV Code Signing Certificate ====
  
-Microsoft requires submitted UEFI binaries to be signed using an EV Code Signing certificate. ​ These can be obtained from providers such as [[https://​www.digicert.com/​friends/​sysdev/​|DigiCert]] at a cost of around US$500 for a three-year certificate. ​ Note that you must purchase the more expensive **EV Code Signing Certificate** for signing UEFI submissions;​ the regular Code Signing Certificate will not be accepted by Microsoft.+Microsoft requires submitted UEFI binaries to be signed using an EV Code Signing certificate. ​ These can be obtained from providers such as [[https://​www.digicert.com/​friends/​sysdev/​|DigiCert]] at a cost of around US$2000 for a three-year certificate. ​ Note that you must purchase the more expensive **EV Code Signing Certificate** for signing UEFI submissions;​ the regular Code Signing Certificate will not be accepted by Microsoft.
  
-==== Aladdin ​eToken ​PRO 72k (Java) ​====+==== SafeNet ​eToken ​5110+ FIPS ====
  
 {{ :​clipart:​etoken.jpeg?​160x120|An Aladdin eToken}} {{ :​clipart:​etoken.jpeg?​160x120|An Aladdin eToken}}
  
-At the time of writing, DigiCert provides EV Code Signing Certificates in the form of an Aladdin eToken ​PRO 72k (Java) ​USB hardware token. ​ The token contains the certificate and the corresponding private key.+At the time of writing, DigiCert provides EV Code Signing Certificates in the form of an Aladdin/​SafeNet ​eToken ​5110+ FIPS USB hardware token. ​ The token contains the certificate and the corresponding private key.
  
-The token is almost (but not quite) supported by the various open source hardware token drivers available for Linux. ​ As an interim measure, you can download and install the proprietary [[https://​www.digicert.com/​StaticFiles/​SafeNetAuthenticationClient-SAC_9_0_43_Linux.zip|Safenet Authentication Client]]. ​ The Safenet Authentication Client includes many features which you don't need or want (such as GUI tools and RPM post-installation scripts which cause Firefox to automatically attempt to use your certificate to identify you to every website that you visit): you probably want to disable or delete most of these after installation.+The token is almost (but not quite) supported by the various open source hardware token drivers available for Linux. ​ As an interim measure, you can download and install the proprietary [[https://​www.digicert.com/​StaticFiles/​SAC_10_0_Linux_Post_GA.zip|Safenet Authentication Client]]. ​ The Safenet Authentication Client includes many features which you don't need or want (such as GUI tools and RPM post-installation scripts which cause Firefox to automatically attempt to use your certificate to identify you to every website that you visit): you probably want to disable or delete most of these after installation.
  
 The only required portion of the Safenet Authentication Client software is the library ''/​usr/​lib64/​libeToken.so''​. ​ This library provides a standardised PKCS#11 API which allows tools such as ''​[[https://​github.com/​OpenSC/​OpenSC/​wiki|opensc]]''​ and ''​[[https://​www.openssl.org|openssl]]''​ to use the hardware token. The only required portion of the Safenet Authentication Client software is the library ''/​usr/​lib64/​libeToken.so''​. ​ This library provides a standardised PKCS#11 API which allows tools such as ''​[[https://​github.com/​OpenSC/​OpenSC/​wiki|opensc]]''​ and ''​[[https://​www.openssl.org|openssl]]''​ to use the hardware token.
Line 37: Line 37:
     Certificate Object, type = X.509 cert     Certificate Object, type = X.509 cert
       label: ​     Fen Systems Ltd.       label: ​     Fen Systems Ltd.
-      ID:         3342cb0ff9b8e672bdcecbff80ebf89f9c785ce5+      ID:         842ea4f497f6defa75e786015c2cdbfd12a18891
  
 The certificate can then be extracted using the command The certificate can then be extracted using the command
  
-    pkcs11-tool --module libeToken.so --read-object --type cert --id 3342cb0ff9b8e672bdcecbff80ebf89f9c785ce5 ​\+    pkcs11-tool --module libeToken.so --read-object --type cert --id 842ea4f497f6defa75e786015c2cdbfd12a18891 ​\
         | openssl x509 -inform DER -out codesigning.crt         | openssl x509 -inform DER -out codesigning.crt
  
-(replacing "''​3342cb0ff9b8e672bdcecbff80ebf89f9c785ce5''"​ with the ID of your certificate). ​ This will give you a file ''​codesigning.crt''​ containing your code signing certificate (but not the private key, which remains on the token). ​ You can examine the contents of ''​codesigning.crt''​ using+(replacing "''​842ea4f497f6defa75e786015c2cdbfd12a18891''"​ with the ID of your certificate). ​ This will give you a file ''​codesigning.crt''​ containing your code signing certificate (but not the private key, which remains on the token). ​ You can examine the contents of ''​codesigning.crt''​ using
  
     openssl x509 -in codesigning.crt -noout -text     openssl x509 -in codesigning.crt -noout -text
Line 50: Line 50:
 ==== Toolchain ==== ==== Toolchain ====
  
-{{ :​clipart:​chain.jpeg?​300x144|A (tool)chain}}+{{ :​clipart:​chain.jpeg?​300x180|A (tool)chain}}
  
 To sign UEFI .cab files for submission to Microsoft you will need to also install To sign UEFI .cab files for submission to Microsoft you will need to also install
  
-  * ''​[[https://github.com/rhinstaller/​pesign|pesign]]''​ +  * ''​[[http://ftp.gnome.org/pub/GNOME/sources/gcab|gcab]]''​
-  * ''​[[http://​ohnopub.net/~ohnobinki/lcab/|lcab]]''​+
   * ''​[[https://​www.openssl.org|openssl]]''​   * ''​[[https://​www.openssl.org|openssl]]''​
   * ''​[[https://​github.com/​OpenSC/​OpenSC/​wiki/​Engine-pkcs11-quickstart|engine_pkcs11]]''​   * ''​[[https://​github.com/​OpenSC/​OpenSC/​wiki/​Engine-pkcs11-quickstart|engine_pkcs11]]''​
-  * ''​[[http://​sourceforge.net/​projects/​osslsigncode/​|osslsigncode]]''​ +  * ''​[[http://​sourceforge.net/​projects/​osslsigncode/​|osslsigncode]]''​((Do not try to use ''​pesign''​ for code signing, since it is [[https://​github.com/​rhboot/​pesign/​issues/​105|broken]] and unable ​to perform signing using a hardware token. ​ Use ''​osslsigncode''​ instead. ​ In case ''​pesign''​ is ever fixed in future: you can configure NSS to use ''​libeToken.so''​ for ''​pesign''​ using
- +
-All of these are available prepackaged for Red Hat and SuSE derivatives ​(Fedora, CentOS, OpenSuSE, etc).  You should ​not need to build any of these from source. +
- +
-You will need to configure NSS to use ''​libeToken.so''​ for ''​pesign''​ using+
  
     sudo modutil -dbdir /​etc/​pki/​pesign -add eToken -libfile /​usr/​lib64/​libeToken.so     sudo modutil -dbdir /​etc/​pki/​pesign -add eToken -libfile /​usr/​lib64/​libeToken.so
  
-You can list the certificates available for use by ''​pesign''​ using+You can then list the certificates available for use by ''​pesign''​ using
  
     certutil -d /​etc/​pki/​pesign -h eToken -L     certutil -d /​etc/​pki/​pesign -h eToken -L
 +    ​
 +and attempt signing using e.g.
 +
 +    pesign -s -i unsigned.exe -o signed.exe -t "Fen Systems Ltd." -c "Fen Systems Ltd."
 +    ​
 +(replacing "''​Fen Systems Ltd.''"​ with the name of your token as shown by ''​certutil''​ above).
 +))
 +
 +
 +All of these are available prepackaged for Red Hat and SuSE derivatives (Fedora, CentOS, OpenSuSE, etc).  You should not need to build any of these from source.
  
 ==== Microsoft Hardware Dev Center ==== ==== Microsoft Hardware Dev Center ====
  
-You will need to sign up for an account at the [[https://sysdev.microsoft.com/|Microsoft ​Hardware Dev Center]].  The sign-up process will require you to sign a copy of ''​[[http://go.microsoft.com/​fwlink/?​LinkId=393250|winqual.exe]]'':​ you can do this using+You will need to sign up for an account at the [[https://partner.microsoft.com|Microsoft ​Partner ​Center]] ​and [[https://partner.microsoft.com/​en-us/dashboard/​account/​managecertificates|add your code signing certificate]].  This process will require you to sign a downloaded file ''​SignableFile.bin'':​ you can do this using
  
-    ​pesign ​-s -i winqual.exe -o winqual-signed.exe ​-t "Fen Systems Ltd." ​-c "Fen Systems Ltd."+    ​osslsigncode ​-pkcs11module /​usr/​lib64/​libeToken.so -h sha256 ​-askpass \ 
 +                 -t http://​timestamp.digicert.com -certs codesigning.crt \ 
 +                 -key 842ea4f497f6defa75e786015c2cdbfd12a18891 \ 
 +                 -in SignableFile.bin -out SignedFile.bin
  
-(replacing "''​Fen Systems Ltd.''"​ with the name of your token as shown by ''​certutil''​ above).+(replacing "''​842ea4f497f6defa75e786015c2cdbfd12a18891''"​ with the ID of your certificate ​as before).
  
 ==== Creating a UEFI signing submission ==== ==== Creating a UEFI signing submission ====
Line 82: Line 90:
 To create a UEFI signing submission, you must create a ''​.cab''​ file containing your (unsigned) ''​.efi''​ files. ​ For example, you can create a ''​submission.cab''​ file containing ''​[[http://​boot.ipxe.org/​ipxe.efi|ipxe.efi]]''​ and ''​[[http://​boot.ipxe.org/​snponly.efi|snponly.efi]]''​ using To create a UEFI signing submission, you must create a ''​.cab''​ file containing your (unsigned) ''​.efi''​ files. ​ For example, you can create a ''​submission.cab''​ file containing ''​[[http://​boot.ipxe.org/​ipxe.efi|ipxe.efi]]''​ and ''​[[http://​boot.ipxe.org/​snponly.efi|snponly.efi]]''​ using
  
-    ​lcab -n -ipxe.efi snponly.efi ​submission.cab+    ​gcab -n -c submission.cab ​ipxe.efi snponly.efi
  
 You can sign the ''​submission.cab''​ file using You can sign the ''​submission.cab''​ file using
  
-    osslsigncode ​-pkcs11engine /​usr/​lib64/​openssl/​engines/​engine_pkcs11.so \ +    osslsigncode -pkcs11module /​usr/​lib64/​libeToken.so -h sha256 -askpass ​
-                 -pkcs11module /​usr/​lib64/​libeToken.so ​-certs codesigning.crt \ +                 -t http://​timestamp.digicert.com ​-certs codesigning.crt ​
-                 -h sha256 -askpass -t http://​timestamp.digicert.com \ +                 ​-key ​842ea4f497f6defa75e786015c2cdbfd12a18891 ​\
-                 ​-key ​3342cb0ff9b8e672bdcecbff80ebf89f9c785ce5 ​\+
                  -in submission.cab -out submission-signed.cab                  -in submission.cab -out submission-signed.cab
  
-(replacing "''​3342cb0ff9b8e672bdcecbff80ebf89f9c785ce5''"​ with the ID of your certificate as before).+(replacing "''​842ea4f497f6defa75e786015c2cdbfd12a18891''"​ with the ID of your certificate as before).
  
 ==== Submitting to Microsoft ==== ==== Submitting to Microsoft ====
  
-Log in to the [[https://sysdev.microsoft.com/​|Microsoft ​Hardware Dev Center]] and choose "Create ​UEFI submission"​. ​ You will unfortunately need to use Windows to upload the ''​submission-signed.cab''​ file, since the submission page uses Silverlight instead of a standard HTML form.((Microsoft is special.))+Log in to the [[https://partner.microsoft.com/​en-us/​dashboard/​hardware/​filesign|Microsoft ​Partner ​Center]] and choose "Submit New UEFI".
  
 ==== Waiting ==== ==== Waiting ====
appnote/etoken.txt · Last modified: 2023/08/31 10:58 by mcb30
Recent changes RSS feed CC Attribution-Share Alike 4.0 International Driven by DokuWiki
All uses of this content must include an attribution to the iPXE project and the URL https://ipxe.org
References to "iPXE" may not be altered or removed.