Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions certs/test/include.am
Original file line number Diff line number Diff line change
Expand Up @@ -121,9 +121,16 @@ EXTRA_DIST += \
certs/test/nc-ancestor/00-uri-permit-ca-permissive-key.pem \
certs/test/nc-ancestor/01-uri-permit-ca-cert.pem \
certs/test/nc-ancestor/01-uri-permit-ca-key.pem \
certs/test/nc-ancestor/01-uri-permit-ca-selfissued-cert.pem \
certs/test/nc-ancestor/01-uri-permit-ca-selfloop-cert.pem \
certs/test/nc-ancestor/01-uri-permit-ca-selfloop-key.pem \
certs/test/nc-ancestor/02-benign-sub-ca-cert.pem \
certs/test/nc-ancestor/02-benign-sub-ca-key.pem \
certs/test/nc-ancestor/03-leaf-attacker-key.pem \
certs/test/nc-ancestor/03-leaf-chain.pem \
certs/test/nc-ancestor/03-selfissued-leaf-cert.pem \
certs/test/nc-ancestor/03-selfissued-valid-leaf-cert.pem \
certs/test/nc-ancestor/03-selfloop-leaf-cert.pem \
certs/test/nc-ancestor/03-selfloop-valid-leaf-cert.pem \
certs/test/nc-ancestor/03-valid-leaf-cert.pem \
certs/test/nc-ancestor/03-valid-leaf-key.pem
12 changes: 12 additions & 0 deletions certs/test/nc-ancestor/01-uri-permit-ca-selfissued-cert.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
-----BEGIN CERTIFICATE-----
MIIBwjCCAWigAwIBAgIBEzAKBggqhkjOPQQDAjA4MQswCQYDVQQGEwJVUzERMA8G
A1UECgwITkMgVGVzdHMxFjAUBgNVBAMMDVVSSSBQZXJtaXQgQ0EwHhcNMjYxMTA2
MTkyNzIxWhcNNDYxMTAxMTkyNzIxWjA4MQswCQYDVQQGEwJVUzERMA8GA1UECgwI
TkMgVGVzdHMxFjAUBgNVBAMMDVVSSSBQZXJtaXQgQ0EwWTATBgcqhkjOPQIBBggq
hkjOPQMBBwNCAARa5TKzBn7IAmACK5uk8Y+l1/PV4o9pwnsbQR5N3291A4Z52JZ2
OdLsIZzhg27smqDlnXesUDov4S6BVBEUgKwzo2MwYTAPBgNVHRMBAf8EBTADAQH/
MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUEREREREREREREREREREREREREREw
HwYDVR0jBBgwFoAU17wuBSyDXCKK/YsCoH6YeRZlzXQwCgYIKoZIzj0EAwIDSAAw
RQIhAOyosfbmkUV2O6qOxujPO0GLcy/8P+UUfqR77/BIb45pAiBMyI3WOdMeIkoh
pt0D5QYfmux4NZrKvyW+7YUQ79gpyQ==
-----END CERTIFICATE-----
13 changes: 13 additions & 0 deletions certs/test/nc-ancestor/01-uri-permit-ca-selfloop-cert.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
-----BEGIN CERTIFICATE-----
MIIB7jCCAZSgAwIBAgIBFDAKBggqhkjOPQQDAjA4MQswCQYDVQQGEwJVUzERMA8G
A1UECgwITkMgVGVzdHMxFjAUBgNVBAMMDVVSSSBQZXJtaXQgQ0EwHhcNMjYxMTA2
MjA1NzIxWhcNNDYxMTAxMjA1NzIxWjA4MQswCQYDVQQGEwJVUzERMA8GA1UECgwI
TkMgVGVzdHMxFjAUBgNVBAMMDVVSSSBQZXJtaXQgQ0EwWTATBgcqhkjOPQIBBggq
hkjOPQMBBwNCAASd89ZOqUGRiGZ6EJPe5Ixql3SJDWwGPoak7hIJUbG1gpq1yPE9
qRrrjttx/Wdd7F1J2V0Tz06w5U+knZTFg/dvo4GOMIGLMA8GA1UdEwEB/wQFMAMB
Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBQiIiIAIiIiIiIiIiIiIiIiIiIi
IjBJBgNVHSMEQjBAoTukOTA3MQswCQYDVQQGEwJVUzERMA8GA1UECgwITkMgVGVz
dHMxFTATBgNVBAMMDE5DIFRlc3QgUm9vdIIBETAKBggqhkjOPQQDAgNIADBFAiEA
gfxWUW18vk1M0fZz/ATHRqOvgnl6vWzbIfGqIsaXVcoCIHhgbIbWQLRDxzynrd7v
Ub3/LpirS785DU66GItJ9T39
-----END CERTIFICATE-----
5 changes: 5 additions & 0 deletions certs/test/nc-ancestor/01-uri-permit-ca-selfloop-key.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIJiHP3Uaox1ooRULgObGYNCm+lWFtYKA21kCLG7gVJzHoAoGCCqGSM49
AwEHoUQDQgAEnfPWTqlBkYhmehCT3uSMapd0iQ1sBj6GpO4SCVGxtYKatcjxPaka
647bcf1nXexdSdldE89OsOVPpJ2UxYP3bw==
-----END EC PRIVATE KEY-----
13 changes: 13 additions & 0 deletions certs/test/nc-ancestor/03-selfissued-leaf-cert.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
-----BEGIN CERTIFICATE-----
MIICBjCCAa2gAwIBAgIBMjAKBggqhkjOPQQDAjA4MQswCQYDVQQGEwJVUzERMA8G
A1UECgwITkMgVGVzdHMxFjAUBgNVBAMMDVVSSSBQZXJtaXQgQ0EwHhcNMjYxMTA2
MTkyNzIxWhcNNDYxMTAxMTkyNzIxWjBAMQswCQYDVQQGEwJVUzERMA8GA1UECgwI
TkMgVGVzdHMxHjAcBgNVBAMMFU5DIFRlc3QgQXR0YWNrZXIgTGVhZjBZMBMGByqG
SM49AgEGCCqGSM49AwEHA0IABNAzKoFsCE7NysRkRxmHdI61HECHaMhInraZ3s1v
GrgyYRXvmesAjzZIfCpm58kjRKdJpcKJFL74uaJeM/Gzsl+jgZ8wgZwwDAYDVR0T
AQH/BAIwADAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHQYD
VR0OBBYEFO6GdfO6MvjzgDGAs71HPqOXaCtBMB8GA1UdIwQYMBaAFBERERERERER
ERERERERERERERERMCcGA1UdEQEB/wQdMBuGGWh0dHBzOi8vYXR0YWNrZXIuY29t
L2xlYWYwCgYIKoZIzj0EAwIDRwAwRAIgeV2lLWd0ex2wmlUGBL6EKe3qt473LI4P
q4N9Fb559I0CIB2jHrsRNz+eTJnYGSr1ulYn97ebQD6ZIuDn8lQhvYum
-----END CERTIFICATE-----
13 changes: 13 additions & 0 deletions certs/test/nc-ancestor/03-selfissued-valid-leaf-cert.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
-----BEGIN CERTIFICATE-----
MIICBTCCAaygAwIBAgIBMzAKBggqhkjOPQQDAjA4MQswCQYDVQQGEwJVUzERMA8G
A1UECgwITkMgVGVzdHMxFjAUBgNVBAMMDVVSSSBQZXJtaXQgQ0EwHhcNMjYxMTA2
MTkyNzIxWhcNNDYxMTAxMTkyNzIxWjA9MQswCQYDVQQGEwJVUzERMA8GA1UECgwI
TkMgVGVzdHMxGzAZBgNVBAMMEk5DIFRlc3QgVmFsaWQgTGVhZjBZMBMGByqGSM49
AgEGCCqGSM49AwEHA0IABNcVnczEUQaQMcxlrButtTd8HqQEoMLGBl8XLPdI/eZs
42jj3B4l6txsi/zPG+9klJad5sPkp2Uqf9PiHowizW+jgaEwgZ4wDAYDVR0TAQH/
BAIwADAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHQYDVR0O
BBYEFLG1JSabNebv3xs8ZTuMVceg4FmrMB8GA1UdIwQYMBaAFBERERERERERERER
ERERERERERERMCkGA1UdEQEB/wQfMB2GG2h0dHBzOi8vYmVuaWduLmV4YW1wbGUu
Y29tLzAKBggqhkjOPQQDAgNHADBEAiBDedccc8Do8rV+ZtfBUI3XkuS7Qm78aDBb
/IYa86h3/QIgdw85qtNx5jnhNzG+HpHKKysIF38d6EWcuZQjctnvqyA=
-----END CERTIFICATE-----
13 changes: 13 additions & 0 deletions certs/test/nc-ancestor/03-selfloop-leaf-cert.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
-----BEGIN CERTIFICATE-----
MIICCDCCAa2gAwIBAgIBNDAKBggqhkjOPQQDAjA4MQswCQYDVQQGEwJVUzERMA8G
A1UECgwITkMgVGVzdHMxFjAUBgNVBAMMDVVSSSBQZXJtaXQgQ0EwHhcNMjYxMTA2
MjA1NzIxWhcNNDYxMTAxMjA1NzIxWjBAMQswCQYDVQQGEwJVUzERMA8GA1UECgwI
TkMgVGVzdHMxHjAcBgNVBAMMFU5DIFRlc3QgQXR0YWNrZXIgTGVhZjBZMBMGByqG
SM49AgEGCCqGSM49AwEHA0IABNAzKoFsCE7NysRkRxmHdI61HECHaMhInraZ3s1v
GrgyYRXvmesAjzZIfCpm58kjRKdJpcKJFL74uaJeM/Gzsl+jgZ8wgZwwDAYDVR0T
AQH/BAIwADAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHQYD
VR0OBBYEFO6GdfO6MvjzgDGAs71HPqOXaCtBMB8GA1UdIwQYMBaAFCIiIgAiIiIi
IiIiIiIiIiIiIiIiMCcGA1UdEQEB/wQdMBuGGWh0dHBzOi8vYXR0YWNrZXIuY29t
L2xlYWYwCgYIKoZIzj0EAwIDSQAwRgIhAMC16OUiGJfGeir9UR9Rx6TVC61HgtTF
K/jbYr+Eoc9mAiEAg0ICIKY4VUOmwko22FfF5MVa5ya2HeU0PEI/gBXoemE=
-----END CERTIFICATE-----
64 changes: 64 additions & 0 deletions certs/test/nc-ancestor/gen-nc-ancestor.sh
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,29 @@ subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid
EOF

cat > "$WORK/selfissued-ca.cnf" <<'EOF'
[req]
distinguished_name = dn
prompt = no
[dn]
[v3_selfissued_ca]
basicConstraints = critical, CA:TRUE
keyUsage = critical, digitalSignature, keyCertSign, cRLSign
subjectKeyIdentifier = 11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
authorityKeyIdentifier = keyid
EOF

cat > "$WORK/selfloop-ca.cnf" <<'EOF'
[req]
distinguished_name = dn
prompt = no
[v3_selfloop_ca]
basicConstraints = critical, CA:TRUE
keyUsage = critical, digitalSignature, keyCertSign, cRLSign
subjectKeyIdentifier = 22:22:22:00:22:22:22:22:22:22:22:22:22:22:22:22:22:22:22:22
authorityKeyIdentifier = issuer:always
EOF

cat > "$WORK/leaf-attacker.cnf" <<'EOF'
[req]
distinguished_name = dn
Expand Down Expand Up @@ -149,6 +172,47 @@ mkchild "$DIR/03-valid-leaf-key.pem" "NC Test Valid Leaf" \
"$DIR/03-valid-leaf-cert.pem" "$WORK/leaf-valid.cnf" \
v3_leaf_valid 0x31

# ---- 01 uri-permit-ca-selfissued: subject == issuer == uri-permit-ca's DN
# and uri-permit-ca's key, no NC, distinct SKID. Issued by uri-permit-ca,
# so it reaches a peer in the chain below it. ----

issuer_cert="$DIR/01-uri-permit-ca-cert.pem"
issuer_key="$DIR/01-uri-permit-ca-key.pem"
mkchild "$DIR/01-uri-permit-ca-key.pem" "URI Permit CA" \
"$DIR/01-uri-permit-ca-selfissued-cert.pem" "$WORK/selfissued-ca.cnf" \
v3_selfissued_ca 0x13

# ---- 03 leaves issued by the self-issued CA ----

issuer_cert="$DIR/01-uri-permit-ca-selfissued-cert.pem"
issuer_key="$DIR/01-uri-permit-ca-key.pem"
mkchild "$DIR/03-leaf-attacker-key.pem" "NC Test Attacker Leaf" \
"$DIR/03-selfissued-leaf-cert.pem" "$WORK/leaf-attacker.cnf" \
v3_leaf_attacker 0x32
mkchild "$DIR/03-valid-leaf-key.pem" "NC Test Valid Leaf" \
"$DIR/03-selfissued-valid-leaf-cert.pem" "$WORK/leaf-valid.cnf" \
v3_leaf_valid 0x33

# ---- 01 uri-permit-ca-selfloop: same DN as uri-permit-ca, own key, and an
# AKID with no keyIdentifier. Its SKID is pinned to uri-permit-ca's CA-table
# row (first 4 bytes big-endian, modulo 11) so a name lookup reaches it
# first. ----

issuer_cert="$DIR/01-uri-permit-ca-cert.pem"
issuer_key="$DIR/01-uri-permit-ca-key.pem"
mkchild "$DIR/01-uri-permit-ca-selfloop-key.pem" "URI Permit CA" \
"$DIR/01-uri-permit-ca-selfloop-cert.pem" "$WORK/selfloop-ca.cnf" \
v3_selfloop_ca 0x14

issuer_cert="$DIR/01-uri-permit-ca-selfloop-cert.pem"
issuer_key="$DIR/01-uri-permit-ca-selfloop-key.pem"
mkchild "$DIR/03-leaf-attacker-key.pem" "NC Test Attacker Leaf" \
"$DIR/03-selfloop-leaf-cert.pem" "$WORK/leaf-attacker.cnf" \
v3_leaf_attacker 0x34
mkchild "$DIR/03-valid-leaf-key.pem" "NC Test Valid Leaf" \
"$DIR/03-selfloop-valid-leaf-cert.pem" "$WORK/leaf-valid.cnf" \
v3_leaf_valid 0x35

# ---- Concatenated bundle: attacker leaf + benign-sub-ca + uri-permit-ca ----

cat "$WORK/03-leaf-cert.pem" \
Expand Down
5 changes: 5 additions & 0 deletions linuxkm/linuxkm_wc_port.h
Original file line number Diff line number Diff line change
Expand Up @@ -1171,6 +1171,9 @@
#ifndef NO_SKID
struct Signer *GetCAByName(struct WOLFSSL_CERT_MANAGER *cm,
unsigned char *hash);
struct Signer *GetCAByNameSkip(struct WOLFSSL_CERT_MANAGER *cm,
unsigned char *hash,
const struct Signer *skip);
#ifdef HAVE_OCSP
struct Signer* GetCAByKeyHash(struct WOLFSSL_CERT_MANAGER *cm,
const unsigned char* keyHash);
Expand Down Expand Up @@ -1546,6 +1549,7 @@
typeof(GetCA) *GetCA;
#ifndef NO_SKID
typeof(GetCAByName) *GetCAByName;
typeof(GetCAByNameSkip) *GetCAByNameSkip;
#ifdef HAVE_OCSP
typeof(GetCAByKeyHash) *GetCAByKeyHash;
#endif /* HAVE_OCSP */
Expand Down Expand Up @@ -1842,6 +1846,7 @@
#define GetCA WC_PIE_INDIRECT_SYM(GetCA)
#ifndef NO_SKID
#define GetCAByName WC_PIE_INDIRECT_SYM(GetCAByName)
#define GetCAByNameSkip WC_PIE_INDIRECT_SYM(GetCAByNameSkip)
#ifdef HAVE_OCSP
#define GetCAByKeyHash WC_PIE_INDIRECT_SYM(GetCAByKeyHash)
#endif /* HAVE_OCSP */
Expand Down
1 change: 1 addition & 0 deletions linuxkm/module_hooks.c
Original file line number Diff line number Diff line change
Expand Up @@ -2402,6 +2402,7 @@ static int set_up_wolfssl_linuxkm_pie_redirect_table(void) {
wolfssl_linuxkm_pie_redirect_table.GetCA = GetCA;
#ifndef NO_SKID
wolfssl_linuxkm_pie_redirect_table.GetCAByName = GetCAByName;
wolfssl_linuxkm_pie_redirect_table.GetCAByNameSkip = GetCAByNameSkip;
#ifdef HAVE_OCSP
wolfssl_linuxkm_pie_redirect_table.GetCAByKeyHash = GetCAByKeyHash;
#endif /* HAVE_OCSP */
Expand Down
9 changes: 8 additions & 1 deletion src/ssl_certman.c
Original file line number Diff line number Diff line change
Expand Up @@ -3069,6 +3069,13 @@ Signer* GetCAByAKID(WOLFSSL_CERT_MANAGER* cm, const byte* issuer,
#ifndef NO_SKID
/* return CA if found, otherwise NULL. Walk through hash table. */
Signer* GetCAByName(WOLFSSL_CERT_MANAGER* cm, byte* hash)
{
return GetCAByNameSkip(cm, hash, NULL);
}

/* As GetCAByName() but never returns skip. */
Signer* GetCAByNameSkip(WOLFSSL_CERT_MANAGER* cm, byte* hash,
const Signer* skip)
{
Signer* ret = NULL;
Signer* signers;
Expand All @@ -3083,7 +3090,7 @@ Signer* GetCAByName(WOLFSSL_CERT_MANAGER* cm, byte* hash)
for (row = 0; row < CA_TABLE_SIZE && ret == NULL; row++) {
signers = cm->caTable[row];
while (signers && ret == NULL) {
if (XMEMCMP(hash, signers->subjectNameHash,
if (signers != skip && XMEMCMP(hash, signers->subjectNameHash,
SIGNER_DIGEST_SIZE) == 0) {
ret = signers;
}
Expand Down
Loading
Loading