Changeset 38284


Ignore:
Timestamp:
2013-10-02T14:12:10+02:00 (4 years ago)
Author:
cyrus
Message:

Add package signing infrastructure

Add package signing key and certificate configuration options to the
"Image configuration" submenu. If enabled, the Packages.gz list will
be signed as file Packages.sig. The passphrase for the signing key can
be sourced from a file or entered by the user. The signing certificate
is automatically added to the firmware image if opkg-smime is selected.

Signed-off-by: Evan Hunt <each@…>
Signed-off-by: Steven Barth <steven@…>

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/prereq-build.mk

    r37122 r38284  
    169169)) 
    170170 
     171$(eval $(call RequireCommand,openssl, \ 
     172        Please install openssl. \ 
     173)) 
     174 
    171175define Require/gnu-find 
    172176        $(FIND) --version 2>/dev/null 
  • trunk/package/Makefile

    r37841 r38284  
    121121        $(call mklibs) 
    122122 
     123PASSOPT="" 
     124PASSARG="" 
     125ifndef CONFIG_OPKGSMIME_PASSPHRASE 
     126  ifneq ($(call qstrip,$(CONFIG_OPKGSMIME_PASSFILE)),) 
     127    PASSOPT="-passin" 
     128    PASSARG="file:$(call qstrip,$(CONFIG_OPKGSMIME_PASSFILE))" 
     129  endif 
     130endif 
     131 
    123132$(curdir)/index: FORCE 
    124         @(cd $(PACKAGE_DIR); $(SCRIPT_DIR)/ipkg-make-index.sh . 2>&1 > Packages && \ 
    125                 gzip -9c Packages > Packages.gz \ 
    126         ) 
     133ifeq ($(call qstrip,$(CONFIG_OPKGSMIME_KEY)),) 
     134        @echo Signing key has not been configured 
     135else 
     136ifeq ($(call qstrip,$(CONFIG_OPKGSMIME_CERT)),) 
     137        @echo Certificate has not been configured 
     138else 
     139        @echo Generating package index... 
     140        @(cd $(PACKAGE_DIR); \ 
     141                $(SCRIPT_DIR)/ipkg-make-index.sh . 2>&1 > Packages && \ 
     142                gzip -9c Packages > Packages.gz ) 
     143        @echo Signing package index... 
     144        @(cd $(PACKAGE_DIR); \ 
     145                openssl smime -binary -in Packages.gz \ 
     146                        -out Packages.sig -outform PEM -sign \ 
     147                        -signer $(CONFIG_OPKGSMIME_CERT) \ 
     148                        -inkey $(CONFIG_OPKGSMIME_KEY) \ 
     149                        $(PASSOPT) $(PASSARG) ) 
     150endif 
     151endif 
    127152 
    128153$(curdir)/preconfig: 
  • trunk/package/base-files/image-config.in

    r31289 r38284  
    184184                         %T .. Target name 
    185185                         %S .. Target/Subtarget name 
     186 
     187menuconfig SMIMEOPT 
     188        bool "Package signing options" if IMAGEOPT 
     189        default n 
     190        help 
     191                These options configure the signing key and certificate to 
     192                be used for signing and verifying packages. 
     193 
     194        config OPKGSMIME_CERT 
     195                string 
     196                prompt "Path to certificate (PEM certificate format)" if SMIMEOPT 
     197                help 
     198                  Path to the certificate to use for signature verification 
     199 
     200        config OPKGSMIME_KEY 
     201                string 
     202                prompt "Path to signing key (PEM private key format)" if SMIMEOPT 
     203                help 
     204                  Path to the key to use for signing packages 
     205 
     206        config OPKGSMIME_PASSPHRASE 
     207                bool 
     208                default y 
     209                prompt "Wait for a passphrase when signing packages?" if SMIMEOPT 
     210                help 
     211                  If this value is set, then the build will pause and request a passphrase 
     212                  from the command line when signing packages. This SHOULD NOT be used with 
     213                  automatic builds. If this value is not set, a file can be specified from 
     214                  which the passphrase will be read. 
     215 
     216        config OPKGSMIME_PASSFILE 
     217                string 
     218                prompt "Path to a file containing the passphrase" if SMIMEOPT 
     219                depends on !OPKGSMIME_PASSPHRASE 
     220                help 
     221                  Path to a file containing the passphrase for the signing key. 
     222                  If the signing key is not encrypted and does not require a passphrase, 
     223                  this option may be left blank. 
  • trunk/package/system/opkg/Makefile

    r38220 r38284  
    110110 
    111111Package/opkg/install = $(call Package/opkg/Default/install,$(1),) 
    112 Package/opkg-smime/install = $(call Package/opkg/Default/install,$(1),-smime) 
    113112 
     113define Package/opkg-smime/install 
     114        $(call Package/opkg/Default/install,$(1),-smime) 
     115        $(INSTALL_DIR) $(1)/etc/ssl/certs 
     116        $(if $(CONFIG_OPKGSMIME_CERT),$(INSTALL_DATA) $(call qstrip,$(CONFIG_OPKGSMIME_CERT)) $(1)/etc/ssl/certs/opkg.pem,) 
     117endef 
    114118 
    115119define Build/InstallDev 
  • trunk/package/system/opkg/files/opkg-smime.conf

    r38220 r38284  
    55option overlay_root /overlay 
    66option check_signature 1 
    7 option signature_ca_path /etc/ssl/certs/ 
     7option signature_ca_file /etc/ssl/certs/opkg.pem 
Note: See TracChangeset for help on using the changeset viewer.