mirror of
				https://git.code.sf.net/p/linux-ima/ima-evm-utils
				synced 2025-10-31 13:10:42 +01:00 
			
		
		
		
	Compare commits
	
		
			8 Commits
		
	
	
		
			v1.5
			...
			next-testi
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | dc0cbaea42 | ||
|   | 14bce8a97c | ||
|   | ce9bfdd091 | ||
|   | 9f669a6b38 | ||
|   | 6e1b9b1521 | ||
|   | 31f4a22b57 | ||
|   | 29c4268764 | ||
|   | 0924a739e2 | 
| @@ -7,7 +7,13 @@ if MANPAGE_DOCBOOK_XSL | ||||
| dist_man_MANS = evmctl.1 | ||||
| endif | ||||
|  | ||||
| doc_DATA =  examples/ima-genkey-self.sh examples/ima-genkey.sh examples/ima-gen-local-ca.sh | ||||
| doc_DATA = \ | ||||
| 	 examples/ima-genkey-self.sh \ | ||||
| 	 examples/ima-genkey.sh \ | ||||
| 	 examples/ima-gen-local-ca.sh \ | ||||
| 	 examples/ima-genkey-self-ecc.sh \ | ||||
| 	 examples/ima-genkey-ecc.sh \ | ||||
| 	 examples/ima-gen-local-ca-ecc.sh | ||||
| EXTRA_DIST = autogen.sh $(doc_DATA) | ||||
|  | ||||
| CLEANFILES = *.html *.xsl | ||||
|   | ||||
							
								
								
									
										41
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								README
									
									
									
									
									
								
							| @@ -200,11 +200,11 @@ Generate signing and verification keys | ||||
|  | ||||
| Generate private key in plain text format: | ||||
|  | ||||
|     openssl genrsa -out privkey_evm.pem 1024 | ||||
|     openssl genrsa -out privkey_evm.pem 2048 | ||||
|  | ||||
| Generate encrypted private key: | ||||
|  | ||||
|     openssl genrsa -des3 -out privkey_evm.pem 1024 | ||||
|     openssl genrsa -des3 -out privkey_evm.pem 2048 | ||||
|  | ||||
| Make encrypted private key from unencrypted: | ||||
|  | ||||
| @@ -213,15 +213,27 @@ Make encrypted private key from unencrypted: | ||||
| Generate self-signed X509 public key certificate and private key for using kernel | ||||
| asymmetric keys support: | ||||
|  | ||||
|     openssl req -new -nodes -utf8 -sha1 -days 36500 -batch \ | ||||
|     openssl req -new -nodes -utf8 -sha256 -days 36500 -batch \ | ||||
|     	        -x509 -config x509_evm.genkey \ | ||||
| 	        -outform DER -out x509_evm.der -keyout privkey_evm.pem | ||||
|  | ||||
| Create an elliptic curve (EC) key (supported since Linux v5.13) | ||||
|  | ||||
|     openssl ecparam -name prime256v1 -genkey -out privkey_evm.pem | ||||
|  | ||||
| Generate self-signed x509 EC public key certificate and private key for using | ||||
| kernel asymmetric key support (supported since Linux v5.13): | ||||
|  | ||||
|    openssl req -new -nodes -utf8 -sha1 -days 36500 -batch \ | ||||
|                 -x509 -config x509_evm.genkey \ | ||||
|                 -outform DER -out x509_evm.der -keyout privkey_evm.pem \ | ||||
|                 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 | ||||
|  | ||||
| Configuration file x509_evm.genkey: | ||||
|  | ||||
| 	# Beginning of the file | ||||
| 	[ req ] | ||||
| 	default_bits = 1024 | ||||
| 	default_bits = 2048 | ||||
| 	distinguished_name = req_distinguished_name | ||||
| 	prompt = no | ||||
| 	string_mask = utf8only | ||||
| @@ -235,6 +247,7 @@ Configuration file x509_evm.genkey: | ||||
| 	[ myexts ] | ||||
| 	basicConstraints=critical,CA:FALSE | ||||
| 	keyUsage=digitalSignature | ||||
| 	extendedKeyUsage=critical,codeSigning | ||||
| 	subjectKeyIdentifier=hash | ||||
| 	authorityKeyIdentifier=keyid | ||||
| 	# EOF | ||||
| @@ -244,6 +257,9 @@ Generate public key for using RSA key format: | ||||
|  | ||||
|     openssl rsa -pubout -in privkey_evm.pem -out pubkey_evm.pem | ||||
|  | ||||
| Similarly generate public EC key: | ||||
|  | ||||
|     openssl ec -pubout -in privkey_evm.pem -out pubkey_evm.pem | ||||
|  | ||||
| Copy keys to /etc/keys: | ||||
|  | ||||
| @@ -287,12 +303,18 @@ Configuration file ima-local-ca.genkey: | ||||
| 	basicConstraints=CA:TRUE | ||||
| 	subjectKeyIdentifier=hash | ||||
| 	authorityKeyIdentifier=keyid:always,issuer | ||||
| 	# keyUsage = cRLSign, keyCertSign | ||||
| 	keyUsage = cRLSign, keyCertSign | ||||
| 	# EOF | ||||
|  | ||||
| Note: To generated elliptic curve keys add the following parameters to | ||||
|       the 'req' commands below (supported since Linux v5.13): | ||||
|  | ||||
|       -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 | ||||
|  | ||||
|  | ||||
| Generate private key and X509 public key certificate: | ||||
|  | ||||
|  openssl req -new -x509 -utf8 -sha1 -days 3650 -batch -config $GENKEY \ | ||||
|  openssl req -new -x509 -utf8 -sha256 -days 3650 -batch -config $GENKEY \ | ||||
|              -outform DER -out ima-local-ca.x509 -keyout ima-local-ca.priv | ||||
|  | ||||
| Produce X509 in DER format for using while building the kernel: | ||||
| @@ -303,7 +325,7 @@ Configuration file ima.genkey: | ||||
|  | ||||
| 	# Beginning of the file | ||||
| 	[ req ] | ||||
| 	default_bits = 1024 | ||||
| 	default_bits = 2048 | ||||
| 	distinguished_name = req_distinguished_name | ||||
| 	prompt = no | ||||
| 	string_mask = utf8only | ||||
| @@ -327,7 +349,7 @@ Configuration file ima.genkey: | ||||
|  | ||||
| Generate private key and X509 public key certificate signing request: | ||||
|  | ||||
|  openssl req -new -nodes -utf8 -sha1 -days 365 -batch -config $GENKEY \ | ||||
|  openssl req -new -nodes -utf8 -sha256 -days 365 -batch -config $GENKEY \ | ||||
|              -out csr_ima.pem -keyout privkey_ima.pem | ||||
|  | ||||
| Sign X509 public key certificate signing request with local IMA CA private key: | ||||
| @@ -448,6 +470,9 @@ Examples of scripts to generate X509 public key certificates: | ||||
|  /usr/share/doc/ima-evm-utils/ima-genkey-self.sh | ||||
|  /usr/share/doc/ima-evm-utils/ima-genkey.sh | ||||
|  /usr/share/doc/ima-evm-utils/ima-gen-local-ca.sh | ||||
|  /usr/share/doc/ima-evm-utils/ima-genkey-self-ecc.sh | ||||
|  /usr/share/doc/ima-evm-utils/ima-genkey-ecc.sh | ||||
|  /usr/share/doc/ima-evm-utils/ima-gen-local-ca-ecc.sh | ||||
|  | ||||
|  | ||||
| AUTHOR | ||||
|   | ||||
							
								
								
									
										28
									
								
								examples/ima-gen-local-ca-ecc.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										28
									
								
								examples/ima-gen-local-ca-ecc.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| GENKEY=ima-local-ca.genkey | ||||
|  | ||||
| cat << __EOF__ >$GENKEY | ||||
| [ req ] | ||||
| distinguished_name = req_distinguished_name | ||||
| prompt = no | ||||
| string_mask = utf8only | ||||
| x509_extensions = v3_ca | ||||
|  | ||||
| [ req_distinguished_name ] | ||||
| O = IMA-CA | ||||
| CN = IMA/EVM certificate signing key | ||||
| emailAddress = ca@ima-ca | ||||
|  | ||||
| [ v3_ca ] | ||||
| basicConstraints=CA:TRUE | ||||
| subjectKeyIdentifier=hash | ||||
| authorityKeyIdentifier=keyid:always,issuer | ||||
| keyUsage = cRLSign, keyCertSign | ||||
| __EOF__ | ||||
|  | ||||
| openssl req -new -x509 -utf8 -sha256 -days 3650 -batch -config $GENKEY \ | ||||
| 		-outform DER -out ima-local-ca.x509 -keyout ima-local-ca.priv \ | ||||
| 		-newkey ec -pkeyopt ec_paramgen_curve:prime256v1 | ||||
|  | ||||
| openssl x509 -inform DER -in ima-local-ca.x509 -out ima-local-ca.pem | ||||
| @@ -19,10 +19,10 @@ emailAddress = ca@ima-ca | ||||
| basicConstraints=CA:TRUE | ||||
| subjectKeyIdentifier=hash | ||||
| authorityKeyIdentifier=keyid:always,issuer | ||||
| # keyUsage = cRLSign, keyCertSign | ||||
| keyUsage = cRLSign, keyCertSign | ||||
| __EOF__ | ||||
|  | ||||
| openssl req -new -x509 -utf8 -sha1 -days 3650 -batch -config $GENKEY \ | ||||
| openssl req -new -x509 -utf8 -sha256 -days 3650 -batch -config $GENKEY \ | ||||
| 		-outform DER -out ima-local-ca.x509 -keyout ima-local-ca.priv | ||||
|  | ||||
| openssl x509 -inform DER -in ima-local-ca.x509 -out ima-local-ca.pem | ||||
|   | ||||
							
								
								
									
										33
									
								
								examples/ima-genkey-ecc.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										33
									
								
								examples/ima-genkey-ecc.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| GENKEY=ima.genkey | ||||
|  | ||||
| cat << __EOF__ >$GENKEY | ||||
| [ req ] | ||||
| distinguished_name = req_distinguished_name | ||||
| prompt = no | ||||
| string_mask = utf8only | ||||
| x509_extensions = v3_usr | ||||
|  | ||||
| [ req_distinguished_name ] | ||||
| O = `hostname` | ||||
| CN = `whoami` signing key | ||||
| emailAddress = `whoami`@`hostname` | ||||
|  | ||||
| [ v3_usr ] | ||||
| basicConstraints=critical,CA:FALSE | ||||
| #basicConstraints=CA:FALSE | ||||
| keyUsage=digitalSignature | ||||
| #keyUsage = nonRepudiation, digitalSignature, keyEncipherment | ||||
| extendedKeyUsage=critical,codeSigning | ||||
| subjectKeyIdentifier=hash | ||||
| authorityKeyIdentifier=keyid | ||||
| #authorityKeyIdentifier=keyid,issuer | ||||
| __EOF__ | ||||
|  | ||||
| openssl req -new -nodes -utf8 -sha256 -days 365 -batch -config $GENKEY \ | ||||
| 		-out csr_ima.pem -keyout privkey_ima.pem \ | ||||
| 		-newkey ec -pkeyopt ec_paramgen_curve:prime256v1 | ||||
| openssl x509 -req -in csr_ima.pem -days 365 -extfile $GENKEY -extensions v3_usr \ | ||||
| 		-CA ima-local-ca.pem -CAkey ima-local-ca.priv -CAcreateserial \ | ||||
| 		-outform DER -out x509_ima.der | ||||
							
								
								
									
										28
									
								
								examples/ima-genkey-self-ecc.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										28
									
								
								examples/ima-genkey-self-ecc.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| GENKEY=x509_evm.genkey | ||||
|  | ||||
| cat << __EOF__ >$GENKEY | ||||
| [ req ] | ||||
| distinguished_name = req_distinguished_name | ||||
| prompt = no | ||||
| string_mask = utf8only | ||||
| x509_extensions = myexts | ||||
|  | ||||
| [ req_distinguished_name ] | ||||
| O = `hostname` | ||||
| CN = `whoami` signing key | ||||
| emailAddress = `whoami`@`hostname` | ||||
|  | ||||
| [ myexts ] | ||||
| basicConstraints=critical,CA:FALSE | ||||
| keyUsage=digitalSignature | ||||
| subjectKeyIdentifier=hash | ||||
| authorityKeyIdentifier=keyid | ||||
| __EOF__ | ||||
|  | ||||
| openssl req -x509 -new -nodes -utf8 -sha256 -days 3650 -batch -config $GENKEY \ | ||||
| 		-outform DER -out x509_evm.der -keyout privkey_evm.pem \ | ||||
| 		-newkey ec -pkeyopt ec_paramgen_curve:prime256v1 | ||||
|  | ||||
| openssl ec -pubout -in privkey_evm.pem -out pubkey_evm.pem | ||||
| @@ -4,7 +4,7 @@ GENKEY=x509_evm.genkey | ||||
|  | ||||
| cat << __EOF__ >$GENKEY | ||||
| [ req ] | ||||
| default_bits = 1024 | ||||
| default_bits = 2048 | ||||
| distinguished_name = req_distinguished_name | ||||
| prompt = no | ||||
| string_mask = utf8only | ||||
| @@ -22,7 +22,7 @@ subjectKeyIdentifier=hash | ||||
| authorityKeyIdentifier=keyid | ||||
| __EOF__ | ||||
|  | ||||
| openssl req -x509 -new -nodes -utf8 -sha1 -days 3650 -batch -config $GENKEY \ | ||||
| openssl req -x509 -new -nodes -utf8 -sha256 -days 3650 -batch -config $GENKEY \ | ||||
| 		-outform DER -out x509_evm.der -keyout privkey_evm.pem | ||||
|  | ||||
| openssl rsa -pubout -in privkey_evm.pem -out pubkey_evm.pem | ||||
|   | ||||
| @@ -4,7 +4,7 @@ GENKEY=ima.genkey | ||||
|  | ||||
| cat << __EOF__ >$GENKEY | ||||
| [ req ] | ||||
| default_bits = 1024 | ||||
| default_bits = 2048 | ||||
| distinguished_name = req_distinguished_name | ||||
| prompt = no | ||||
| string_mask = utf8only | ||||
| @@ -20,12 +20,13 @@ basicConstraints=critical,CA:FALSE | ||||
| #basicConstraints=CA:FALSE | ||||
| keyUsage=digitalSignature | ||||
| #keyUsage = nonRepudiation, digitalSignature, keyEncipherment | ||||
| extendedKeyUsage=critical,codeSigning | ||||
| subjectKeyIdentifier=hash | ||||
| authorityKeyIdentifier=keyid | ||||
| #authorityKeyIdentifier=keyid,issuer | ||||
| __EOF__ | ||||
|  | ||||
| openssl req -new -nodes -utf8 -sha1 -days 365 -batch -config $GENKEY \ | ||||
| openssl req -new -nodes -utf8 -sha256 -days 365 -batch -config $GENKEY \ | ||||
| 		-out csr_ima.pem -keyout privkey_ima.pem | ||||
| openssl x509 -req -in csr_ima.pem -days 365 -extfile $GENKEY -extensions v3_usr \ | ||||
| 		-CA ima-local-ca.pem -CAkey ima-local-ca.priv -CAcreateserial \ | ||||
|   | ||||
| @@ -376,7 +376,7 @@ static int calc_evm_hash(const char *file, unsigned char *hash) | ||||
| 	if (mode_str) | ||||
| 		st.st_mode = strtoul(mode_str, NULL, 10); | ||||
|  | ||||
| 	if (!evm_immutable) { | ||||
| 	if (!evm_immutable && !evm_portable) { | ||||
| 		if (S_ISREG(st.st_mode) && !generation_str) { | ||||
| 			int fd = open(file, 0); | ||||
|  | ||||
|   | ||||
| @@ -30,7 +30,7 @@ | ||||
| # custom policy rules might take precedence. | ||||
|  | ||||
| cd "$(dirname "$0")" || exit 1 | ||||
| PATH=../src:../fsverity-utils:$PATH | ||||
| PATH=../src:../fsverity-utils:/usr/sbin:$PATH | ||||
| source ./functions.sh | ||||
|  | ||||
| # Base VERBOSE on the environment variable, if set. | ||||
| @@ -120,6 +120,9 @@ create_loopback_file() { | ||||
| 	case $fs_type in | ||||
| 	ext4|f2fs) | ||||
| 		options="-O verity" | ||||
| 		# verity requires blocksize to be equal to pagesize. | ||||
| 		pagesize=$(getconf PAGE_SIZE) | ||||
| 		[ "$pagesize" -eq 4096 ] || options+=" -b $pagesize" | ||||
| 		;; | ||||
| 	btrfs) | ||||
| 		;; | ||||
| @@ -136,7 +139,7 @@ create_loopback_file() { | ||||
| 	fi | ||||
|  | ||||
| 	echo "INFO: Building an $fs_type filesystem" | ||||
| 	if ! mkfs -t "$fs_type" -q "${TST_IMG}" "$options"; then | ||||
| 	if ! mkfs -t "$fs_type" -q "${TST_IMG}" $options; then | ||||
| 		echo "${RED}FAILURE: Creating $fs_type filesystem${NORM}" | ||||
| 		exit "$FAIL" | ||||
| 	fi | ||||
|   | ||||
		Reference in New Issue
	
	Block a user