Blame view

certs/Makefile 3.75 KB
cfc411e7f   David Howells   Move certificate ...
1
2
3
4
5
  #
  # Makefile for the linux kernel signature checking certificates.
  #
  
  obj-$(CONFIG_SYSTEM_TRUSTED_KEYRING) += system_keyring.o system_certificates.o
cfc411e7f   David Howells   Move certificate ...
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
  ifeq ($(CONFIG_SYSTEM_TRUSTED_KEYRING),y)
  
  $(eval $(call config_filename,SYSTEM_TRUSTED_KEYS))
  
  # GCC doesn't include .incbin files in -MD generated dependencies (PR#66871)
  $(obj)/system_certificates.o: $(obj)/x509_certificate_list
  
  # Cope with signing_key.x509 existing in $(srctree) not $(objtree)
  AFLAGS_system_certificates.o := -I$(srctree)
  
  quiet_cmd_extract_certs  = EXTRACT_CERTS   $(patsubst "%",%,$(2))
        cmd_extract_certs  = scripts/extract-cert $(2) $@ || ( rm $@; exit 1)
  
  targets += x509_certificate_list
  $(obj)/x509_certificate_list: scripts/extract-cert $(SYSTEM_TRUSTED_KEYS_SRCPREFIX)$(SYSTEM_TRUSTED_KEYS_FILENAME) FORCE
  	$(call if_changed,extract_certs,$(SYSTEM_TRUSTED_KEYS_SRCPREFIX)$(CONFIG_SYSTEM_TRUSTED_KEYS))
  endif
  
  clean-files := x509_certificate_list .x509.list
  
  ifeq ($(CONFIG_MODULE_SIG),y)
  ###############################################################################
  #
  # If module signing is requested, say by allyesconfig, but a key has not been
  # supplied, then one will need to be generated to make sure the build does not
  # fail and that the kernel may be used afterwards.
  #
  ###############################################################################
  ifndef CONFIG_MODULE_SIG_HASH
  $(error Could not determine digest type to use from kernel config)
  endif
5d06ee20b   Arnd Bergmann   modsign: hide ope...
37
38
39
  redirect_openssl	= 2>&1
  quiet_redirect_openssl	= 2>&1
  silent_redirect_openssl = 2>/dev/null
cfc411e7f   David Howells   Move certificate ...
40
41
42
43
44
  # We do it this way rather than having a boolean option for enabling an
  # external private key, because 'make randconfig' might enable such a
  # boolean option and we unfortunately can't make it depend on !RANDCONFIG.
  ifeq ($(CONFIG_MODULE_SIG_KEY),"certs/signing_key.pem")
  $(obj)/signing_key.pem: $(obj)/x509.genkey
5d06ee20b   Arnd Bergmann   modsign: hide ope...
45
46
47
48
49
50
51
52
53
  	@$(kecho) "###"
  	@$(kecho) "### Now generating an X.509 key pair to be used for signing modules."
  	@$(kecho) "###"
  	@$(kecho) "### If this takes a long time, you might wish to run rngd in the"
  	@$(kecho) "### background to keep the supply of entropy topped up.  It"
  	@$(kecho) "### needs to be run as root, and uses a hardware random"
  	@$(kecho) "### number generator if one is available."
  	@$(kecho) "###"
  	$(Q)openssl req -new -nodes -utf8 -$(CONFIG_MODULE_SIG_HASH) -days 36500 \
cfc411e7f   David Howells   Move certificate ...
54
55
  		-batch -x509 -config $(obj)/x509.genkey \
  		-outform PEM -out $(obj)/signing_key.pem \
5d06ee20b   Arnd Bergmann   modsign: hide ope...
56
57
58
59
60
  		-keyout $(obj)/signing_key.pem \
  		$($(quiet)redirect_openssl)
  	@$(kecho) "###"
  	@$(kecho) "### Key pair generated."
  	@$(kecho) "###"
cfc411e7f   David Howells   Move certificate ...
61
62
  
  $(obj)/x509.genkey:
5d06ee20b   Arnd Bergmann   modsign: hide ope...
63
  	@$(kecho) Generating X.509 key generation config
cfc411e7f   David Howells   Move certificate ...
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
  	@echo  >$@ "[ req ]"
  	@echo >>$@ "default_bits = 4096"
  	@echo >>$@ "distinguished_name = req_distinguished_name"
  	@echo >>$@ "prompt = no"
  	@echo >>$@ "string_mask = utf8only"
  	@echo >>$@ "x509_extensions = myexts"
  	@echo >>$@
  	@echo >>$@ "[ req_distinguished_name ]"
  	@echo >>$@ "#O = Unspecified company"
  	@echo >>$@ "CN = Build time autogenerated kernel key"
  	@echo >>$@ "#emailAddress = unspecified.user@unspecified.company"
  	@echo >>$@
  	@echo >>$@ "[ myexts ]"
  	@echo >>$@ "basicConstraints=critical,CA:FALSE"
  	@echo >>$@ "keyUsage=digitalSignature"
  	@echo >>$@ "subjectKeyIdentifier=hash"
  	@echo >>$@ "authorityKeyIdentifier=keyid"
  endif
  
  $(eval $(call config_filename,MODULE_SIG_KEY))
  
  # If CONFIG_MODULE_SIG_KEY isn't a PKCS#11 URI, depend on it
  ifeq ($(patsubst pkcs11:%,%,$(firstword $(MODULE_SIG_KEY_FILENAME))),$(firstword $(MODULE_SIG_KEY_FILENAME)))
  X509_DEP := $(MODULE_SIG_KEY_SRCPREFIX)$(MODULE_SIG_KEY_FILENAME)
  endif
  
  # GCC PR#66871 again.
  $(obj)/system_certificates.o: $(obj)/signing_key.x509
62172c81f   David Woodhouse   modsign: Use if_c...
92
93
94
  targets += signing_key.x509
  $(obj)/signing_key.x509: scripts/extract-cert $(X509_DEP) FORCE
  	$(call if_changed,extract_certs,$(MODULE_SIG_KEY_SRCPREFIX)$(CONFIG_MODULE_SIG_KEY))
cfc411e7f   David Howells   Move certificate ...
95
  endif