¼¼Êõ²©¿Í

05/07/2017 ×÷Õß ÔÆº£ÓÎÏ·

¹¹½¨²¢°²×°ÒÑÇ©ÃûÔÆº£ÓÎÏ·Çý¶¯³ÌÐòÄ£¿éÓëlinuxcanÏÂÔØ


ÕâÊǹØÓÚLinux°²È«Æô¶¯ºÍÇ©ÃûÄ£¿éÁ½ÆªÏµÁÐÎÄÕµĵÚ2ƪ£º

  1. Linuxϵͳ°²È«Æô¶¯
  2. ¹¹½¨²¢°²×°ÒÑÇ©ÃûÔÆº£ÓÎÏ·Çý¶¯³ÌÐòÄ£¿é

µÚһƪÎÄÕ¸ÅÊöÁ˰²È«Æô¶¯µÄ¸ÅÄÒÔ¼°ËüÈçºÎÓ°ÏìµÚÈý·½Ä£¿é¡£ÔÚ±¾ÎÄÖУ¬ÎÒÃǽ«½éÉÜÈçºÎ¹¹½¨ºÍÇ©ÃûÔÆº£ÓÎÏ·Çý¶¯³ÌÐòÄ£¿é£¬ÒÔ±ãÄܹ»ÔÚÆôÓÃÁ˰²È«Æô¶¯µÄLinux¼ÆËã»úÉÏʹÓÃËüÃÇ¡£


Linuxϵͳ

ÎÒÃÇ×¼±¸ºÃ×îа²×°µÄUbuntu16.04¡£

  $ uname -a
  Linux mypc 4.8.0-51-generic #54~16.04.1-Ubuntu SMP Wed Apr 26 16:00:28 UTC 2017
x86_64 x86_64 x86_64 GNU/Linux
  $ lsb_release -a
  No LSB modules are available.
  Distributor ID: Ubuntu
  Description:    Ubuntu 16.04.2 LTS
  Release:        16.04
  Codename:       xenial

´´½¨Ö¤ÊéºÍ˽Կ

µÚÒ»²½ÊÇ´´½¨Ò»¸öÖ¤Êé/˽ÓÐRSAÃÜÔ¿¶Ô£¬ÉÔºó½«ÓÃÓÚ¶ÔÄÚºËÄ£¿é½øÐÐÇ©Ãû¡£

Çë×¢ÒâÓÉÓÚ˽ԿÓÃÓÚÇ©ÊðÄ£¿é£¬²¡¶¾ºÍ¶ñÒâÈí¼þ¿ÉÄÜ»áʹÓÃ˽Կ¶ÔÄ£¿é½øÐÐÇ©Ãû²¢Î£¼°²Ù×÷ϵͳ¡£ÒªÈ·±£Ë½Ô¿°²È«¡£1

ʹÓÃopensslÃüÁ´´½¨Ò»¸ö˽ԿºÍDER±àÂëµÄÖ¤Êé¡£2?¼Çס½«¹«ÓÃÃû³Æ£¨CN£©×ֶΣ¨YOUR_NAME£©ÉèÖÃΪ¶Ô·Ã¿ÍÓÐÒâÒåµÄÎÄ×Ö¡£3?´ËÀýÖÐÎÒÃÇʹÓÃkvaser.com×÷Ϊ¹«ÓÃÃû³Æ¡£

  $ mkdir ~/sign_cert
  $ cd ~/sign_cert
  # Change YOUR_NAME below for identification purposes, we’ll use kvaser.com
  $ openssl req -new -x509 -newkey rsa:2048 -keyout modulesign.priv -outform DER
-out modulesign.der -nodes -days 36500 -subj "/CN=YOUR_NAME/"

ÏÖÔÚ³öÏÖÁ½¸öÎļþ¡£

$ ls
modulesign.der modulesign.priv

½«¹«Ô¿µ¼Èë²¢×¢²áµ½ÏµÍ³

ÏÂÒ»²½Ê¹ÓÃmokutil4ÃüÁîµ¼È빫Կ£¬ÈÃÆä¿ÉÒÔ±»ÏµÍ³ÐÅÈΡ£Õâ¸ö¹ý³ÌÐèÒªÁ½²½£¬ÆäÖÐÊ×Ïȵ¼ÈëÃÜÔ¿£¬È»ºóÔÚÏÂ´ÎÆô¶¯»úÆ÷ʱ±ØÐë½øÐÐ×¢²á¡£¼òµ¥µÄÃÜÂë¼´¿É£¬ÒòΪֻÊÇÁÙʱʹÓá£

$ sudo mokutil --import modulesign.der
input password:
input password again:

ÎÒÃÇÏÖÔÚ¿ÉÒÔÑéÖ¤ÊÇ·ñÒѵ¼ÈëÕýÈ·µÄÖ¤Êé¡£ ÔÚÕâÀïÎÒÃÇÒ²×¢Òâµ½ÉÏÃæÊ¹ÓõĹ«ÓÃÃû³Æ£¨CN£©ÊÇkvaser.com¡£

$ sudo mokutil --list-new
[key 1]
SHA1 Fingerprint: 2c:d4:5b:a3:c6:34:3f:a6:1a:8f:e3:d3:23:8d:88:69:7d:33:ae:12
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 18315900181576503446 (0xfe2f262c60615096)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN=kvaser.com
        Validity
            Not Before: May  9 07:52:56 2017 GMT
            Not After : Apr 15 07:52:56 2117 GMT
        Subject: CN=kvaser.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
:
:

ÏÖÔÚÖØÐÂÆô¶¯»úÆ÷¡£Òýµ¼¼ÓÔØ³ÌÐòÆô¶¯Ê±£¬MOK¹ÜÀíÆ÷EFIʵÓóÌÐòÓ¦×Ô¶¯Æô¶¯¡£ÔÚÎҵĻúÆ÷ÆÁÄ»ÉϳöÏÖdzÀ¶É«±³¾°µÄ°×É«ÎÄ×Ö£¬ÌáʾҪ¡°µã»÷ÈÎÒâ¼üÖ´ÐÐMOK¹ÜÀí¡±ºÍ¡°10ÃëºóÆô¶¯¡±5£¬YMMV¡£Ñ¡Ôñ¡°×¢²áMOK¡±£¬Ñ¡ÔñÃÜÔ¿£¬²¢×¢²áÃÜÔ¿¡£ÔÚÉÏÊöµ¼Èë²½ÖèÖÐÎÒÃǻᱻҪÇóÊäÈëÉèÖÃÃÜÂë¡£Íê³É×¢²á²½Ö裬Ȼºó¼ÌÐøÆô¶¯¡£LinuxÄں˽«¼Ç¼¼ÓÔØµÄÃÜÔ¿£¬ÎÒÃÇ¿ÉÒÔʹÓÃdmesgÃüÁî²é¿´ÎÒÃÇ×Ô¼ºµÄÃÜÔ¿¡£

  $ dmesg|grep ’EFI: Loaded cert’
  [    0.671897] EFI: Loaded cert ’Microsoft Windows Production PCA 2011:
a92902398e16c49778cd90f99e4f9ae17c55af53’ linked to ’.builtin_trusted_keys’
  [    0.671908] EFI: Loaded cert ’Microsoft Corporation UEFI CA 2011:
13adbf4309bd82709c8cd54f316ed522988a1bd4’ linked to ’.builtin_trusted_keys’
  [    0.673771] EFI: Loaded cert ’kvaser.com: 74fd8929d9e2fb64a9bd0abe3bdf
42d519b7382f’ linked to ’.builtin_trusted_keys’
  [    0.673902] EFI: Loaded cert ’Canonical Ltd. Master Certificate Authority:
ad91990bc22ab1f517048c23b6655a268e345a63’ linked to ’.builtin_trusted_keys’

ÎÒÃÇÏÖÔÚ»¹¿ÉÒÔʹÓÃmokutilÃüÁî²âÊÔÎÒÃǵÄÖ¤ÊéÊÇ·ñÒÑ×¢²á¡£

$ cd ~/sign_cert
$ mokutil --test-key modulesign.der
modulesign.der is already enrolled

¹¹½¨£¬Ç©ÃûºÍ°²×°Ä£¿é

ÔÚ¹¹½¨Ö®Ç°£¬ÎÒÃÇÐèÒª´ÓÔÆº£ÓÎÏ·ÏÂÔØÒ³ÃæÏÂÔØ×îа汾µÄlinuxcan£¬½ØÖÁµ½ÕâÆªÎÄÕÂ׫¸å×îа汾ÊÇv5.20.¡£6

$ wget http://www.kvaser.com/software/7330130980754/V5_20_0/linuxcan.tar.gz
$ tar xvzf linuxcan.tar.gz
$ cd linuxcan

ΪÁË·½±ãÎÒÃÇÔÚÕý³£¹¹½¨¹ý³ÌÖн«ÎļþÇ©Ãû£¬ÎÒÃÇÐÞ¸ÄÎļþconfig.makÖеÄkv_moduleÄ¿±êÈçÏ¡£7

# Target found in config.mak located in the top level directory of linuxcan
kv_module:
        @echo --------------------------------------------------------------------
        @echo "building $(KV_MODULE_NAME) $(IS_DEBUG)"
        @echo "Kernel src:" $(KV_KERNEL_SRC_DIR)
        $(MAKE) -C $(KV_KERNEL_SRC_DIR) SUBDIRS=$(PWD) modules
        @if [ "$(KV_SIGN_CERT_PATH)" != "" ] && [ "$(KV_SIGN_CERT_NAME)" != "" ]; then \
                echo "Signing module $(KV_MODULE_NAME).ko with $(KV_SIGN_CERT_PATH)/$(KV_SIGN_CERT_NAME)"; \
                $(KV_KERNEL_SRC_DIR)/scripts/sign-file sha256 $(KV_SIGN_CERT_PATH)/$(KV_SIGN_CERT_NAME).priv \
                $(KV_SIGN_CERT_PATH)/$(KV_SIGN_CERT_NAME).der $(KV_MODULE_NAME).ko; \
        fi
        @echo --------------------------------------------------------------------

ÏÖÔÚ¿ÉÒÔͨ¹ýÌí¼ÓÁ½¸ö»·¾³±äÁ¿KV_SIGN_CERT_PATHºÍKV_SIGN_CERT_NAME£¬Ê¹Óó£¼ûµÄmakeÃüÁîÀ´¹¹½¨ºÍÇ©ÃûÇý¶¯³ÌÐòÄ£¿é¡£ÔÚ¹¹½¨ºó°²×°Ä£¿é¡£

 # KV_SIGN_CERT_PATH is the path to your private key and certificate.
 # KV_SIGN_CERT_NAME is the base file name of your private key and
certificate, without suffix.
 $ make KV_SIGN_CERT_PATH=~/sign_cert KV_SIGN_CERT_NAME=modulesign
 $ sudo make install

ΪÁËÑéÖ¤ÒѰ²×°µÄÄ£¿éÊÇ·ñÕý³£¹¤×÷£¬ÎÒÃÇʹÓÃmodprobeÃüÁîÀ´ÊÖ¶¯¼ÓÔØÄ£¿é²¢ÑéÖ¤ËüÊÇ·ñÒѼÓÔØ¡£8?ÎÒÃÇҪȷ±£É¾³ýÄ£¿éÒÔÃâÔÚÔÆº£ÓÎÏ· USBÉ豸Á¬½Óʱ×Ô¶¯¼ÓÔØ¡£

$ sudo modprobe mhydra
$ lsmod | grep ’kvcommon\|mhydra’
mhydra                 45056  0
kvcommon               45056  1 mhydra

$ sudo modprobe -r mhydra kvcommon


½Å×¢

1? Óйر£»¤Ë½Ô¿µÄ×¢ÒâÊÂÏî¿ÉÒÔÔÚLinuxÄÚºËÎĵµÖÐÕÒµ½£¬ÍøÖ·Îªhttps://static.lwn.net/kerneldoc/admin-guide/module-signing.html#administering-protecting-the-private-key

2 Äú¿ÉÒÔÔÚSSL°²×°ÖªÊ¶¿âÖÐÔĶÁÓйز»Í¬X509ÎļþÀ©Õ¹Ãû£¨ÈçDER£©µÄ¸ü¶àÐÅÏ¢£¬ÍøÖ·Îªhttps://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how-to-convert-them/.

3?Óйع«ÓÃÃû³ÆÖØÒªÐÔµÄ˵Ã÷£¬Çë²ÎÔÄstackexchangeÎÄÕÂÖеÄÏêϸÄÚÈÝhttps://security.stackexchange.com/questions/40026/openssl-x509-whats-the-significance-of-cn-common-name/.

4? ʹÓÃmokutilÃüÁîÀ´¹ÜÀíshim²ãʹÓõĻúÖ÷ÃÜÔ¿£¨MOK£©£¬ÒÔÑéÖ¤grub2ºÍÄÚºËÓ³Ïñ¡£

5? Èç¹ûÄú´í¹ý´Ë³¬Ê±£¬ÔòÐèÒªÖØÐÂÔËÐÐmokutil --importÃüÁî²¢ÖØÐÂÆô¶¯¡£

6? ÔÆº£ÓÎÏ·ÏÂÔØÒ³Ãæ/downloads

7? µ÷ÕûºóµÄmakefileÄ¿±ê½«±»²¢ÈëlinuxcanµÄÏÂÒ»¸ö°æ±¾

8? ĿǰÎÞ·¨Ê¹ÓÃmodinfo²é¿´Ä£¿éÊÇ·ñÒѾ­Ç©Ãû£¬ÏêϸÐÅÏ¢Çë²ÎÔÄgithubÖÐËùÁеÄcoreosÎÊÌâ£¬ÍøÖ·Îªhttps://github.com/coreos/bugs/issues/1054/

Author Image

Mikkel Gerdes



¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿