mirror of
https://git.code.sf.net/p/linux-ima/ima-evm-utils
synced 2025-07-04 06:25:15 +02:00
Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
dc0cbaea42 | |||
14bce8a97c | |||
ce9bfdd091 | |||
9f669a6b38 | |||
6e1b9b1521 | |||
31f4a22b57 | |||
29c4268764 | |||
0924a739e2 |
@ -7,7 +7,13 @@ if MANPAGE_DOCBOOK_XSL
|
|||||||
dist_man_MANS = evmctl.1
|
dist_man_MANS = evmctl.1
|
||||||
endif
|
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)
|
EXTRA_DIST = autogen.sh $(doc_DATA)
|
||||||
|
|
||||||
CLEANFILES = *.html *.xsl
|
CLEANFILES = *.html *.xsl
|
||||||
|
41
README
41
README
@ -200,11 +200,11 @@ Generate signing and verification keys
|
|||||||
|
|
||||||
Generate private key in plain text format:
|
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:
|
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:
|
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
|
Generate self-signed X509 public key certificate and private key for using kernel
|
||||||
asymmetric keys support:
|
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 \
|
-x509 -config x509_evm.genkey \
|
||||||
-outform DER -out x509_evm.der -keyout privkey_evm.pem
|
-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:
|
Configuration file x509_evm.genkey:
|
||||||
|
|
||||||
# Beginning of the file
|
# Beginning of the file
|
||||||
[ req ]
|
[ req ]
|
||||||
default_bits = 1024
|
default_bits = 2048
|
||||||
distinguished_name = req_distinguished_name
|
distinguished_name = req_distinguished_name
|
||||||
prompt = no
|
prompt = no
|
||||||
string_mask = utf8only
|
string_mask = utf8only
|
||||||
@ -235,6 +247,7 @@ Configuration file x509_evm.genkey:
|
|||||||
[ myexts ]
|
[ myexts ]
|
||||||
basicConstraints=critical,CA:FALSE
|
basicConstraints=critical,CA:FALSE
|
||||||
keyUsage=digitalSignature
|
keyUsage=digitalSignature
|
||||||
|
extendedKeyUsage=critical,codeSigning
|
||||||
subjectKeyIdentifier=hash
|
subjectKeyIdentifier=hash
|
||||||
authorityKeyIdentifier=keyid
|
authorityKeyIdentifier=keyid
|
||||||
# EOF
|
# EOF
|
||||||
@ -244,6 +257,9 @@ Generate public key for using RSA key format:
|
|||||||
|
|
||||||
openssl rsa -pubout -in privkey_evm.pem -out pubkey_evm.pem
|
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:
|
Copy keys to /etc/keys:
|
||||||
|
|
||||||
@ -287,12 +303,18 @@ Configuration file ima-local-ca.genkey:
|
|||||||
basicConstraints=CA:TRUE
|
basicConstraints=CA:TRUE
|
||||||
subjectKeyIdentifier=hash
|
subjectKeyIdentifier=hash
|
||||||
authorityKeyIdentifier=keyid:always,issuer
|
authorityKeyIdentifier=keyid:always,issuer
|
||||||
# keyUsage = cRLSign, keyCertSign
|
keyUsage = cRLSign, keyCertSign
|
||||||
# EOF
|
# 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:
|
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
|
-outform DER -out ima-local-ca.x509 -keyout ima-local-ca.priv
|
||||||
|
|
||||||
Produce X509 in DER format for using while building the kernel:
|
Produce X509 in DER format for using while building the kernel:
|
||||||
@ -303,7 +325,7 @@ Configuration file ima.genkey:
|
|||||||
|
|
||||||
# Beginning of the file
|
# Beginning of the file
|
||||||
[ req ]
|
[ req ]
|
||||||
default_bits = 1024
|
default_bits = 2048
|
||||||
distinguished_name = req_distinguished_name
|
distinguished_name = req_distinguished_name
|
||||||
prompt = no
|
prompt = no
|
||||||
string_mask = utf8only
|
string_mask = utf8only
|
||||||
@ -327,7 +349,7 @@ Configuration file ima.genkey:
|
|||||||
|
|
||||||
Generate private key and X509 public key certificate signing request:
|
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
|
-out csr_ima.pem -keyout privkey_ima.pem
|
||||||
|
|
||||||
Sign X509 public key certificate signing request with local IMA CA private key:
|
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-self.sh
|
||||||
/usr/share/doc/ima-evm-utils/ima-genkey.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-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
|
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
|
basicConstraints=CA:TRUE
|
||||||
subjectKeyIdentifier=hash
|
subjectKeyIdentifier=hash
|
||||||
authorityKeyIdentifier=keyid:always,issuer
|
authorityKeyIdentifier=keyid:always,issuer
|
||||||
# keyUsage = cRLSign, keyCertSign
|
keyUsage = cRLSign, keyCertSign
|
||||||
__EOF__
|
__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
|
-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
|
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
|
cat << __EOF__ >$GENKEY
|
||||||
[ req ]
|
[ req ]
|
||||||
default_bits = 1024
|
default_bits = 2048
|
||||||
distinguished_name = req_distinguished_name
|
distinguished_name = req_distinguished_name
|
||||||
prompt = no
|
prompt = no
|
||||||
string_mask = utf8only
|
string_mask = utf8only
|
||||||
@ -22,7 +22,7 @@ subjectKeyIdentifier=hash
|
|||||||
authorityKeyIdentifier=keyid
|
authorityKeyIdentifier=keyid
|
||||||
__EOF__
|
__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
|
-outform DER -out x509_evm.der -keyout privkey_evm.pem
|
||||||
|
|
||||||
openssl rsa -pubout -in privkey_evm.pem -out pubkey_evm.pem
|
openssl rsa -pubout -in privkey_evm.pem -out pubkey_evm.pem
|
||||||
|
@ -4,7 +4,7 @@ GENKEY=ima.genkey
|
|||||||
|
|
||||||
cat << __EOF__ >$GENKEY
|
cat << __EOF__ >$GENKEY
|
||||||
[ req ]
|
[ req ]
|
||||||
default_bits = 1024
|
default_bits = 2048
|
||||||
distinguished_name = req_distinguished_name
|
distinguished_name = req_distinguished_name
|
||||||
prompt = no
|
prompt = no
|
||||||
string_mask = utf8only
|
string_mask = utf8only
|
||||||
@ -20,12 +20,13 @@ basicConstraints=critical,CA:FALSE
|
|||||||
#basicConstraints=CA:FALSE
|
#basicConstraints=CA:FALSE
|
||||||
keyUsage=digitalSignature
|
keyUsage=digitalSignature
|
||||||
#keyUsage = nonRepudiation, digitalSignature, keyEncipherment
|
#keyUsage = nonRepudiation, digitalSignature, keyEncipherment
|
||||||
|
extendedKeyUsage=critical,codeSigning
|
||||||
subjectKeyIdentifier=hash
|
subjectKeyIdentifier=hash
|
||||||
authorityKeyIdentifier=keyid
|
authorityKeyIdentifier=keyid
|
||||||
#authorityKeyIdentifier=keyid,issuer
|
#authorityKeyIdentifier=keyid,issuer
|
||||||
__EOF__
|
__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
|
-out csr_ima.pem -keyout privkey_ima.pem
|
||||||
openssl x509 -req -in csr_ima.pem -days 365 -extfile $GENKEY -extensions v3_usr \
|
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 \
|
-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)
|
if (mode_str)
|
||||||
st.st_mode = strtoul(mode_str, NULL, 10);
|
st.st_mode = strtoul(mode_str, NULL, 10);
|
||||||
|
|
||||||
if (!evm_immutable) {
|
if (!evm_immutable && !evm_portable) {
|
||||||
if (S_ISREG(st.st_mode) && !generation_str) {
|
if (S_ISREG(st.st_mode) && !generation_str) {
|
||||||
int fd = open(file, 0);
|
int fd = open(file, 0);
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
# custom policy rules might take precedence.
|
# custom policy rules might take precedence.
|
||||||
|
|
||||||
cd "$(dirname "$0")" || exit 1
|
cd "$(dirname "$0")" || exit 1
|
||||||
PATH=../src:../fsverity-utils:$PATH
|
PATH=../src:../fsverity-utils:/usr/sbin:$PATH
|
||||||
source ./functions.sh
|
source ./functions.sh
|
||||||
|
|
||||||
# Base VERBOSE on the environment variable, if set.
|
# Base VERBOSE on the environment variable, if set.
|
||||||
@ -120,6 +120,9 @@ create_loopback_file() {
|
|||||||
case $fs_type in
|
case $fs_type in
|
||||||
ext4|f2fs)
|
ext4|f2fs)
|
||||||
options="-O verity"
|
options="-O verity"
|
||||||
|
# verity requires blocksize to be equal to pagesize.
|
||||||
|
pagesize=$(getconf PAGE_SIZE)
|
||||||
|
[ "$pagesize" -eq 4096 ] || options+=" -b $pagesize"
|
||||||
;;
|
;;
|
||||||
btrfs)
|
btrfs)
|
||||||
;;
|
;;
|
||||||
@ -136,7 +139,7 @@ create_loopback_file() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo "INFO: Building an $fs_type filesystem"
|
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}"
|
echo "${RED}FAILURE: Creating $fs_type filesystem${NORM}"
|
||||||
exit "$FAIL"
|
exit "$FAIL"
|
||||||
fi
|
fi
|
||||||
|
Reference in New Issue
Block a user