charon.routing_table_prio
Priority of the routing table.
-charon.rsa_pss = no
- Whether to use RSA with PSS padding instead of PKCS#1 padding by default.
+charon.rsa_pss = yes
+ Use RSA with PSS padding by default. Revert to legacy PKCS#1 padding by
+ setting the option to no.
charon.rsa_pss_trailerfield = no
Whether to encode an explicit trailerField value of 0x01 in the RSA-PSS
* Copyright (C) 2012-2020 Tobias Brunner
* Copyright (C) 2012 Giuliano Grassi
* Copyright (C) 2012 Ralf Sager
+ * Copyright (C) 2023 Andreas Steffen, strongSec GmbH
*
* Copyright (C) secunet Security Networks AG
*
settings->get_bool(settings, "global.ocsp", TRUE));
lib->settings->set_bool(lib->settings,
"charon.rsa_pss",
- settings->get_bool(settings, "global.rsa_pss", FALSE));
+ settings->get_bool(settings, "global.rsa_pss", TRUE));
/* this is actually the size of the complete IKE/IP packet, so if the MTU
* for the TUN devices has to be reduced to pass traffic the IKE packets
* will be a bit smaller than necessary as there is no IPsec overhead like
* Copyright (C) 2008-2018 Tobias Brunner
* Copyright (C) 2005-2009 Martin Willi
* Copyright (C) 2005 Jan Hutter
+ * Copyright (C) 2023 Andreas Steffen, strongSec GmbH
*
* Copyright (C) secunet Security Networks AG
*
while (enumerator->enumerate(enumerator, &config))
{
if (config->scheme == SIGN_RSA_EMSA_PSS &&
- !lib->settings->get_bool(lib->settings, "%s.rsa_pss", FALSE,
+ !lib->settings->get_bool(lib->settings, "%s.rsa_pss", TRUE,
lib->ns))
{
continue;
/*
* Copyright (C) 2008-2017 Tobias Brunner
* Copyright (C) 2007-2009 Martin Willi
- * Copyright (C) 2016 Andreas Steffen
+ * Copyright (C) 2016-2023 Andreas Steffen
*
* Copyright (C) secunet Security Networks AG
*
auth_rule_t type;
void *value;
- rsa_pss = lib->settings->get_bool(lib->settings, "%s.rsa_pss", FALSE,
+ rsa_pss = lib->settings->get_bool(lib->settings, "%s.rsa_pss", TRUE,
lib->ns);
enumerator = enumerator_create_token(constraints, "-", "");
/*
* Copyright (C) 2016 Tobias Brunner
+ * Copyright (C) 2023 Andreas Steffen, strongSec GmbH
*
* Copyright (C) secunet Security Networks AG
*
auth_cfg_t *cfg;
signature_scheme_t none[] = {0};
+ lib->settings->set_bool(lib->settings, "%s.rsa_pss", FALSE, lib->ns);
+
cfg = auth_cfg_create();
cfg->add_pubkey_constraints(cfg, sig_constraints_tests[_i].constraints, FALSE);
check_sig_constraints(cfg, AUTH_RULE_SIGNATURE_SCHEME, sig_constraints_tests[_i].sig);
{
auth_cfg_t *cfg;
+ lib->settings->set_bool(lib->settings, "%s.rsa_pss", FALSE, lib->ns);
lib->settings->set_bool(lib->settings, "%s.signature_authentication_constraints",
TRUE, lib->ns);
{
auth_cfg_t *cfg;
+ lib->settings->set_bool(lib->settings, "%s.rsa_pss", FALSE, lib->ns);
+
cfg = auth_cfg_create();
cfg->add_pubkey_constraints(cfg, sig_constraints_params_tests[_i].constraints, TRUE);
check_sig_constraints_params(cfg, AUTH_RULE_IKE_SIGNATURE_SCHEME,
/*
* Copyright (C) 2009 Martin Willi
- * Copyright (C) 2015-2017 Andreas Steffen
+ * Copyright (C) 2015-2023 Andreas Steffen
*
* Copyright (C) secunet Security Networks AG
*
time_t not_before, not_after, lifetime = 24 * 60 * 60;
char *datenb = NULL, *datena = NULL, *dateform = NULL;
char *arg;
- bool pss = lib->settings->get_bool(lib->settings, "%s.rsa_pss", FALSE,
+ bool pss = lib->settings->get_bool(lib->settings, "%s.rsa_pss", TRUE,
lib->ns);
groups = linked_list_create();
{
pss = TRUE;
}
- else if (!streq(arg, "pkcs1"))
+ else if (streq(arg, "pkcs1"))
+ {
+ pss = FALSE;
+ }
+ else
{
error = "invalid RSA padding";
goto usage;
" --issuercert file [--serial hex] [--lifetime hours]",
" [--not-before datetime] [--not-after datetime] [--dateform form]",
"[--digest md5|sha1|sha224|sha256|sha384|sha512|sha3_224|sha3_256|sha3_384|sha3_512]",
- "[--rsa-padding pkcs1|pss]",
+ "[--rsa-padding pss|pkcs1]",
"[--outform der|pem]"},
{
{"help", 'h', 0, "show usage information"},
{"not-after", 'T', 1, "date/time the validity of the AC ends"},
{"dateform", 'D', 1, "strptime(3) input format, default: %d.%m.%y %T"},
{"digest", 'g', 1, "digest for signature creation, default: key-specific"},
- {"rsa-padding", 'R', 1, "padding for RSA signatures, default: pkcs1"},
+ {"rsa-padding", 'R', 1, "padding for RSA signatures, default: pss"},
{"outform", 'f', 1, "encoding of generated cert, default: der"},
}
});
/*
* Copyright (C) 2009 Martin Willi
- * Copyright (C) 2015-2022 Andreas Steffen
+ * Copyright (C) 2015-2023 Andreas Steffen
*
* Copyright (C) secunet Security Networks AG
*
x509_cert_policy_t *policy = NULL;
traffic_selector_t *ts;
char *arg;
- bool pss = lib->settings->get_bool(lib->settings, "%s.rsa_pss", FALSE,
+ bool pss = lib->settings->get_bool(lib->settings, "%s.rsa_pss", TRUE,
lib->ns);
san = linked_list_create();
{
pss = TRUE;
}
- else if (!streq(arg, "pkcs1"))
+ else if (streq(arg, "pkcs1"))
+ {
+ pss = FALSE;
+ }
+ else
{
error = "invalid RSA padding";
goto usage;
"[--policy-explicit len] [--policy-inhibit len] [--policy-any len]",
"[--cert-policy oid [--cps-uri uri] [--user-notice text]]+",
"[--digest md5|sha1|sha224|sha256|sha384|sha512|sha3_224|sha3_256|sha3_384|sha3_512]",
- "[--rsa-padding pkcs1|pss] [--critical oid]",
+ "[--rsa-padding pss|pkcs1] [--critical oid]",
"[--outform der|pem]"},
{
{"help", 'h', 0, "show usage information"},
{"crlissuer", 'I', 1, "CRL Issuer for CRL at distribution point"},
{"ocsp", 'o', 1, "OCSP AuthorityInfoAccess URI to include"},
{"digest", 'g', 1, "digest for signature creation, default: key-specific"},
- {"rsa-padding", 'R', 1, "padding for RSA signatures, default: pkcs1"},
+ {"rsa-padding", 'R', 1, "padding for RSA signatures, default: pss"},
{"critical", 'X', 1, "critical extension OID to include"},
{"outform", 'f', 1, "encoding of generated cert, default: der"},
}
/*
* Copyright (C) 2009 Martin Willi
- * Copyright (C) 2009-2022 Andreas Steffen
+ * Copyright (C) 2009-2023 Andreas Steffen
*
* Copyright (C) secunet Security Networks AG
*
chunk_t cert_type_ext = chunk_empty;
x509_flag_t flags = 0;
char *arg;
- bool pss = lib->settings->get_bool(lib->settings, "%s.rsa_pss", FALSE,
+ bool pss = lib->settings->get_bool(lib->settings, "%s.rsa_pss", TRUE,
lib->ns);
san = linked_list_create();
{
pss = TRUE;
}
- else if (!streq(arg, "pkcs1"))
+ else if (streq(arg, "pkcs1"))
+ {
+ pss = FALSE;
+ }
+ else
{
error = "invalid RSA padding";
goto usage;
"[--flag serverAuth|clientAuth|ocspSigning|msSmartcardLogon]+",
"[--profile server|client|dual|ocsp] [--password challengePassword]",
"[--digest sha1|sha224|sha256|sha384|sha512|sha3_224|sha3_256|sha3_384|sha3_512]",
- "[--rsa-padding pkcs1|pss] [--outform der|pem]"},
+ "[--rsa-padding pss|pkcs1] [--outform der|pem]"},
{
{"help", 'h', 0, "show usage information"},
{"in", 'i', 1, "private key input file, default: stdin"},
{"profile", 'P', 1, "certificate profile name to include in cert request"},
{"password", 'p', 1, "challengePassword to include in cert request"},
{"digest", 'g', 1, "digest for signature creation, default: key-specific"},
- {"rsa-padding", 'R', 1, "padding for RSA signatures, default: pkcs1"},
+ {"rsa-padding", 'R', 1, "padding for RSA signatures, default: pss"},
{"outform", 'f', 1, "encoding of generated request, default: der"},
}
});
/*
* Copyright (C) 2005 Jan Hutter, Martin Willi
* Copyright (C) 2012 Tobias Brunner
- * Copyright (C) 2022 Andreas Steffen, strongSec GmbH
+ * Copyright (C) 2022-2023 Andreas Steffen, strongSec GmbH
*
* Copyright (C) secunet Security Networks AG
*
bool ok, http_post = FALSE;
bool pss = lib->settings->get_bool(lib->settings,
- "%s.rsa_pss", FALSE, lib->ns);
+ "%s.rsa_pss", TRUE, lib->ns);
bool renewal_via_pkcs_req = lib->settings->get_bool(lib->settings,
"%s.scep.renewal_via_pkcs_req", FALSE, lib->ns);
"[--profile profile] [--password password]",
" --cacert-enc file --cacert-sig file [--cacert file]+",
" --oldcert file --oldkey file] [--cipher aes|des3]",
- "[--digest sha256|sha384|sha512|sha224|sha1] [--rsa-padding pkcs1|pss]",
+ "[--digest sha256|sha384|sha512|sha224|sha1] [--rsa-padding pss|pkcs1]",
"[--interval time] [--maxpolltime time] [--outform der|pem]"},
{
{"help", 'h', 0, "show usage information"},
{"key", 'k', 1, "Old RSA private key about to be replaced"},
{"cipher", 'E', 1, "encryption cipher, default: aes"},
{"digest", 'g', 1, "digest for signature creation, default: sha256"},
- {"rsa-padding", 'R', 1, "padding for RSA signatures, default: pkcs1"},
+ {"rsa-padding", 'R', 1, "padding for RSA signatures, default: pss"},
{"interval", 't', 1, "poll interval, default: 60s"},
{"maxpolltime", 'm', 1, "maximum poll time, default: 0 (no limit)"},
{"outform", 'f', 1, "encoding of stored certificates, default: der"},
/*
* Copyright (C) 2009 Martin Willi
- * Copyright (C) 2015-2019 Andreas Steffen
+ * Copyright (C) 2015-2023 Andreas Steffen
*
* Copyright (C) secunet Security Networks AG
*
x509_cert_policy_t *policy = NULL;
traffic_selector_t *ts;
char *arg;
- bool pss = lib->settings->get_bool(lib->settings, "%s.rsa_pss", FALSE,
+ bool pss = lib->settings->get_bool(lib->settings, "%s.rsa_pss", TRUE,
lib->ns);
san = linked_list_create();
{
pss = TRUE;
}
- else if (!streq(arg, "pkcs1"))
+ else if (streq(arg, "pkcs1"))
+ {
+ pss = FALSE;
+ }
+ else
{
error = "invalid RSA padding";
goto usage;
"[--policy-explicit len] [--policy-inhibit len] [--policy-any len]",
"[--cert-policy oid [--cps-uri uri] [--user-notice text]]+",
"[--digest md5|sha1|sha224|sha256|sha384|sha512|sha3_224|sha3_256|sha3_384|sha3_512]",
- "[--rsa-padding pkcs1|pss] [--critical oid]",
+ "[--rsa-padding pss|pkcs1] [--critical oid]",
"[--outform der|pem]"},
{
{"help", 'h', 0, "show usage information"},
{"flag", 'e', 1, "include extendedKeyUsage flag"},
{"ocsp", 'o', 1, "OCSP AuthorityInfoAccess URI to include"},
{"digest", 'g', 1, "digest for signature creation, default: key-specific"},
- {"rsa-padding", 'R', 1, "padding for RSA signatures, default: pkcs1"},
+ {"rsa-padding", 'R', 1, "padding for RSA signatures, default: pss"},
{"critical", 'X', 1, "critical extension OID to include for test purposes"},
{"outform", 'f', 1, "encoding of generated cert, default: der"},
}
/*
- * Copyright (C) 2017-2022 Andreas Steffen
+ * Copyright (C) 2017-2023 Andreas Steffen
* Copyright (C) 2010 Martin Willi
*
* Copyright (C) secunet Security Networks AG
chunk_t crl_serial = chunk_empty, baseCrlNumber = chunk_empty;
chunk_t critical_extension_oid = chunk_empty;
chunk_t encoding = chunk_empty;
- bool pss = lib->settings->get_bool(lib->settings, "%s.rsa_pss", FALSE,
+ bool pss = lib->settings->get_bool(lib->settings, "%s.rsa_pss", TRUE,
lib->ns);
list = linked_list_create();
{
pss = TRUE;
}
- else if (!streq(arg, "pkcs1"))
+ else if (streq(arg, "pkcs1"))
+ {
+ pss = FALSE;
+ }
+ else
{
error = "invalid RSA padding";
goto usage;
" superseded|cessation-of-operation|certificate-hold]",
" [--date timestamp] --cert file|--serial hex]*",
"[--digest md5|sha1|sha224|sha256|sha384|sha512|sha3_224|sha3_256|sha3_384|sha3_512]",
- "[--rsa-padding pkcs1|pss] [--critical oid]",
+ "[--rsa-padding pss|pkcs1] [--critical oid]",
"[--outform der|pem]"},
{
{"help", 'h', 0, "show usage information"},
{"reason", 'r', 1, "reason for certificate revocation"},
{"date", 'd', 1, "revocation date as unix timestamp, default: now"},
{"digest", 'g', 1, "digest for signature creation, default: key-specific"},
- {"rsa-padding", 'R', 1, "padding for RSA signatures, default: pkcs1"},
+ {"rsa-padding", 'R', 1, "padding for RSA signatures, default: pss"},
{"critical", 'X', 1, "critical extension OID to include for test purposes"},
{"outform", 'f', 1, "encoding of generated crl, default: der"},
}
determined based on the type and size of the signature key.
.TP
.BI "\-R, \-\-rsa\-padding " padding
-Padding to use for RSA signatures. Either \fIpkcs1\fR or \fIpss\fR, defaults
-to \fIpkcs1\fR.
+Padding to use for RSA signatures. Either \fIpss\fR (the default) or \fIpkcs1\fR.
.TP
.BI "\-f, \-\-outform " encoding
Encoding of the created certificate file. Either \fIder\fR (ASN.1 DER) or
determined based on the type and size of the signature key.
.TP
.BI "\-R, \-\-rsa\-padding " padding
-Padding to use for RSA signatures. Either \fIpkcs1\fR or \fIpss\fR, defaults
-to \fIpkcs1\fR.
+Padding to use for RSA signatures. Either \fIpss\fR (the default) or \fIpkcs1\fR.
.TP
.BI "\-f, \-\-outform " encoding
Encoding of the created certificate file. Either \fIder\fR (ASN.1 DER) or
the type and size of the signature key.
.TP
.BI "\-R, \-\-rsa\-padding " padding
-Padding to use for RSA signatures. Either \fIpkcs1\fR or \fIpss\fR, defaults
-to \fIpkcs1\fR.
+Padding to use for RSA signatures. Either \fIpss\fR (the default) or \fIpkcs1\fR.
.TP
.BI "\-f, \-\-outform " encoding
Encoding of the created certificate file. Either \fIder\fR (ASN.1 DER) or
\fIsha384\fR, \fIsha512\fR, or \fIsha1\fR.
.TP
.BI "\-R, \-\-rsa\-padding " padding
-Padding to use for RSA signatures. Either \fIpkcs1\fR (the default) or \fIpss\fR.
+Padding to use for RSA signatures. Either \fIpss\fR (the default) or \fIpkcs1\fR.
.TP
.BI "\-t, \-\-interval " time
Poll interval in seconds, defaults to \fI60s\fR.
determined based on the type and size of the signature key.
.TP
.BI "\-R, \-\-rsa\-padding " padding
-Padding to use for RSA signatures. Either \fIpkcs1\fR or \fIpss\fR, defaults
-to \fIpkcs1\fR.
+Padding to use for RSA signatures. Either \fIpss\fR (the default) or \fIpkcs1\fR.
.TP
.BI "\-f, \-\-outform " encoding
Encoding of the created certificate file. Either \fIder\fR (ASN.1 DER) or
determined based on the type and size of the signature key.
.TP
.BI "\-R, \-\-rsa\-padding " padding
-Padding to use for RSA signatures. Either \fIpkcs1\fR or \fIpss\fR, defaults
-to \fIpkcs1\fR.
+Padding to use for RSA signatures. Either \fIpss\fR (the default) or \fIpkcs1\fR.
.TP
.BI "\-X, \-\-critical " oid
Add a critical extension with the given OID.
pki --signcrl --cakey strongswanKey.pem --cacert strongswanCert.pem \
--digest sha3_256 > ${ROOT}/strongswan_sha3_rsa.crl
+##
+# strongSwan TKM-RSA Root CA
+cd /etc/ca/tkm-rsa
+
+# generate CRL for strongSwan TKM-RSA Root CA
+pki --signcrl --cakey strongswanKey.pem --cacert strongswanCert.pem \
+ --rsa-padding pkcs1 > ${ROOT}/strongswan_tkm_rsa.crl
+
##
# strongSwan Ed25519 Root CA
cd /etc/ca/ed25519
SHA3_RSA_CERT="${SHA3_RSA_DIR}/strongswanCert.pem"
SHA3_RSA_CDP="http://crl.strongswan.org/strongswan_sha3_rsa.crl"
#
+TKM_RSA_DIR="${CA_DIR}/tkm-rsa"
+TKM_RSA_KEY="${TKM_RSA_DIR}/strongswanKey.pem"
+TKM_RSA_CERT="${TKM_RSA_DIR}/strongswanCert.pem"
+TKM_RSA_CERT_DER="${TKM_RSA_DIR}/strongswanCert.der"
+TKM_RSA_CDP="http://crl.strongswan.org/strongswan_tkm_rsa.crl"
+#
ED25519_DIR="${CA_DIR}/ed25519"
ED25519_KEY="${ED25519_DIR}/strongswanKey.pem"
ED25519_CERT="${ED25519_DIR}/strongswanCert.pem"
mkdir -p ${ECDSA_DIR}/certs
mkdir -p ${RFC3779_DIR}/certs
mkdir -p ${SHA3_RSA_DIR}/certs
+mkdir -p ${TKM_RSA_DIR}/certs
mkdir -p ${ED25519_DIR}/certs
mkdir -p ${MONSTER_DIR}/certs
2> /dev/null
done
-# Put DER-encoded moon private key and Root CA certificate into tkm scenarios
-for t in host2host-initiator host2host-responder host2host-xfrmproxy \
- multi-level-ca net2net-initiator net2net-xfrmproxy xfrmproxy-expire \
- xfrmproxy-rekey
-do
- TEST="${TEST_DIR}/tkm/${t}"
- mkdir -p ${TEST}/hosts/moon/${TKM_DIR}
- cp ${CA_DIR}/keys/moonKey.der ${CA_CERT_DER} ${TEST}/hosts/moon/${TKM_DIR}
-done
-
-# Put DER_encoded sun private key and Root CA certificate into tkm scenarios
-TEST="${TEST_DIR}/tkm/multiple-clients"
-mkdir -p ${TEST}/hosts/sun/${TKM_DIR}
-cp ${CA_DIR}/keys/sunKey.der ${CA_CERT_DER} ${TEST}/hosts/sun/${TKM_DIR}
-
# Convert moon private key into unencrypted PKCS#8 format
TEST="${TEST_DIR}/ikev2/rw-pkcs8"
HOST_KEY="${DIR}/hosts/moon/${SWANCTL_DIR}/rsa/moonKey.pem"
openssl x509 -in ${SALES_CERT} -outform der -out ${SALES_CERT_DER}
################################################################################
-# Multi-level CA Certificate Generation #
+# Multi-level CA Certificate Generation with legacy RSA PKCS#1.5 padding #
################################################################################
# Generate Levels Root CA (pathlen is higher than the regular root)
pki --gen --type rsa --size ${RSA_SIZE} --outform pem > ${LEVELS_KEY}
pki --self --type rsa --in ${LEVELS_KEY} --not-before "${START}" --not-after "${CA_END}" \
--ca --pathlen 2 --dn "C=CH, O=${PROJECT}, CN=strongSwan Levels Root CA" \
- --outform pem > ${LEVELS_CERT}
+ --rsa-padding pkcs1 --outform pem > ${LEVELS_CERT}
# For TKM's CA ID mapping
LEVELS_SPK_HEX=`pki --keyid --type rsa --format hex --id spk --in ${LEVELS_KEY}`
pki --issue --cakey ${LEVELS_KEY} --cacert ${LEVELS_CERT} --crl ${LEVELS_CDP} \
--type rsa --in ${LEVELS_L2_KEY} --not-before "${START}" --not-after "${IM_END}" \
--ca --dn "C=CH, O=${PROJECT}, OU=L2, CN=Levels L2 CA" \
- --outform pem > ${LEVELS_L2_CERT}
+ --rsa-padding pkcs1 --outform pem > ${LEVELS_L2_CERT}
# Generate Levels L3 CA signed by Levels L2 CA
pki --gen --type rsa --size ${RSA_SIZE} --outform pem > ${LEVELS_L3_KEY}
pki --issue --cakey ${LEVELS_L2_KEY} --cacert ${LEVELS_L2_CERT} --crl ${LEVELS_L2_CDP} \
--type rsa --in ${LEVELS_L3_KEY} --not-before "${START}" --not-after "${IM_END}" \
--ca --dn "C=CH, O=${PROJECT}, OU=L3, CN=Levels L3 CA" \
- --outform pem > ${LEVELS_L3_CERT}
+ --rsa-padding pkcs1 --outform pem > ${LEVELS_L3_CERT}
for t in ikev2-multi-ca/crls-l3 tkm/multi-level-ca
do
pki --issue --cakey ${LEVELS_L3_KEY} --cacert ${LEVELS_L3_CERT} --type rsa \
--in ${TEST_KEY} --not-before "${START}" --not-after "${EE_END}" --san ${CN} \
--serial ${SERIAL} --dn "C=CH, O=${PROJECT}, OU=L3, CN=${CN}" \
- --crl ${LEVELS_L3_CDP} --outform pem > ${TEST_CERT}
+ --rsa-padding pkcs1 --crl ${LEVELS_L3_CDP} --outform pem > ${TEST_CERT}
cp ${TEST_CERT} ${LEVELS_DIR}/certs/${SERIAL}.pem
for t in tkm/multi-level-ca
# Use specific plugin configuration to issue certificates with SHA-3 signatures
# as not all crypto plugins support them. To avoid entropy issues use the
# default plugins to generate the keys.
-SHA3_PKI_PLUGINS="gmp pem pkcs1 random sha1 sha3 x509"
+SHA3_PKI_PLUGINS="gmp pem pkcs1 random mgf1 sha1 sha3 x509"
# Generate strongSwan SHA3-RSA Root CA
pki --gen --type rsa --size ${RSA_SIZE} --outform pem > ${SHA3_RSA_KEY}
cp ${SHA3_RSA_CERT} ${TEST}/hosts/${h}/${SWANCTL_DIR}/x509ca
done
+################################################################################
+# strongSwan TKM Root CA using legacy RSA PKCS#1.5 padding #
+################################################################################
+
+# Generate strongSwan TKM-RSA Root CA
+pki --gen --type rsa --size ${RSA_SIZE} --outform pem > ${TKM_RSA_KEY}
+pki --self --type rsa --in ${TKM_RSA_KEY} --rsa-padding pkcs1 \
+ --not-before "${START}" --not-after "${CA_END}" --ca \
+ --dn "C=CH, O=${PROJECT}, OU=TKM, CN=strongSwan Root CA" \
+ --outform pem > ${TKM_RSA_CERT}
+
+# Put a copy in the following tkm scenarios
+for t in multi-level-ca multiple-clients
+do
+ TEST="${TEST_DIR}/tkm/${t}"
+ mkdir -p ${TEST}/hosts/carol/${SWANCTL_DIR}/x509ca
+ mkdir -p ${TEST}/hosts/dave/${SWANCTL_DIR}/x509ca
+ cp ${TKM_RSA_CERT} ${TEST}/hosts/carol/${SWANCTL_DIR}/x509ca
+ cp ${TKM_RSA_CERT} ${TEST}/hosts/dave/${SWANCTL_DIR}/x509ca
+done
+
+# Convert strongSwan Root CA certificate into DER format
+openssl x509 -in ${TKM_RSA_CERT} -outform der -out ${TKM_RSA_CERT_DER}
+
+TKM_RSA_SPK_HEX=`pki --keyid --type rsa --format hex --id spk --in ${TKM_RSA_KEY}`
+TKM_RSA_SPKI_HEX=`pki --keyid --type rsa --format hex --id spki --in ${TKM_RSA_KEY}`
+
+# Generate a moon TKM-RSA certificate
+TEST="${TEST_DIR}/tkm/host2host-initiator"
+MOON_KEY="${TEST}/hosts/moon/${TKM_DIR}/moonKey.der"
+MOON_CERT="${TEST}/hosts/moon/${SWANCTL_DIR}/x509/moonCert.pem"
+CN="moon.strongswan.org"
+SERIAL="01"
+mkdir -p ${TEST}/hosts/moon/${TKM_DIR}
+mkdir -p ${TEST}/hosts/moon/${SWANCTL_DIR}/x509
+mkdir -p ${TEST}/hosts/moon/${SWANCTL_DIR}/x509ca
+pki --gen --type rsa --size ${RSA_SIZE} > ${MOON_KEY}
+pki --issue --cakey ${TKM_RSA_KEY} --cacert ${TKM_RSA_CERT} --type rsa \
+ --in ${MOON_KEY} --not-before "${START}" --not-after "${EE_END}" --san ${CN} \
+ --serial ${SERIAL} --dn "C=CH, O=${PROJECT}, OU= TKM, CN=${CN}" \
+ --rsa-padding pkcs1 --crl ${TKM_RSA_CDP} --outform pem > ${MOON_CERT}
+cp ${TKM_RSA_CERT} ${TEST}/hosts/moon/${SWANCTL_DIR}/x509ca
+cp ${TKM_RSA_CERT_DER} ${TEST}/hosts/moon/${TKM_DIR}
+cp ${MOON_CERT} ${TKM_RSA_DIR}/certs/${SERIAL}.pem
+
+# Generate a sun TKM-RSA certificate
+SUN_KEY="${TEST}/hosts/sun/${SWANCTL_DIR}/rsa/sunKey.pem"
+SUN_CERT="${TEST}/hosts/sun/${SWANCTL_DIR}/x509/sunCert.pem"
+CN="sun.strongswan.org"
+SERIAL="02"
+mkdir -p ${TEST}/hosts/sun/${SWANCTL_DIR}/rsa
+mkdir -p ${TEST}/hosts/sun/${SWANCTL_DIR}/x509
+mkdir -p ${TEST}/hosts/sun/${SWANCTL_DIR}/x509ca
+pki --gen --type rsa --size ${RSA_SIZE} --outform pem > ${SUN_KEY}
+pki --issue --cakey ${TKM_RSA_KEY} --cacert ${TKM_RSA_CERT} --type rsa \
+ --in ${SUN_KEY} --not-before "${START}" --not-after "${EE_END}" --san ${CN} \
+ --serial ${SERIAL} --dn "C=CH, O=TKM, CN=${CN}" \
+ --rsa-padding pkcs1 --crl ${TKM_RSA_CDP} --outform pem > ${SUN_CERT}
+cp ${SUN_CERT} ${TKM_RSA_DIR}/certs/${SERIAL}.pem
+cp ${TKM_RSA_CERT} ${TEST}/hosts/sun/${SWANCTL_DIR}/x509ca
+
+
+# Put DER-encoded moon private key and Root CA certificate as well as PEM-encoded
+# moon cert into the tkm/multi-level-ca
+TEST="${TEST_DIR}/tkm/multi-level-ca"
+mkdir -p ${TEST}/hosts/moon/${TKM_DIR}
+mkdir -p ${TEST}/hosts/moon/${SWANCTL_DIR}/x509
+mkdir -p ${TEST}/hosts/moon/${SWANCTL_DIR}/x509ca
+cp ${MOON_KEY} ${TKM_RSA_CERT_DER} ${TEST}/hosts/moon/${TKM_DIR}
+cp ${MOON_CERT} ${TEST}/hosts/moon/${SWANCTL_DIR}/x509
+cp ${TKM_RSA_CERT} ${TEST}/hosts/moon/${SWANCTL_DIR}/x509ca
+
+# Put key and certificate copies into the following tkm scenarios:
+for t in host2host-responder host2host-xfrmproxy net2net-initiator \
+ net2net-xfrmproxy xfrmproxy-expire xfrmproxy-rekey
+do
+ TEST="${TEST_DIR}/tkm/${t}"
+ mkdir -p ${TEST}/hosts/moon/${TKM_DIR}
+ mkdir -p ${TEST}/hosts/moon/${SWANCTL_DIR}/x509
+ mkdir -p ${TEST}/hosts/moon/${SWANCTL_DIR}/x509ca
+ mkdir -p ${TEST}/hosts/sun/${SWANCTL_DIR}/x509ca
+ mkdir -p ${TEST}/hosts/sun/${SWANCTL_DIR}/rsa
+ mkdir -p ${TEST}/hosts/sun/${SWANCTL_DIR}/x509
+ cp ${MOON_KEY} ${TKM_RSA_CERT_DER} ${TEST}/hosts/moon/${TKM_DIR}
+ cp ${MOON_CERT} ${TEST}/hosts/moon/${SWANCTL_DIR}/x509
+ cp ${TKM_RSA_CERT} ${TEST}/hosts/moon/${SWANCTL_DIR}/x509ca
+ cp ${TKM_RSA_CERT} ${TEST}/hosts/sun/${SWANCTL_DIR}/x509ca
+ cp ${SUN_KEY} ${TEST}/hosts/sun/${SWANCTL_DIR}/rsa
+ cp ${SUN_CERT} ${TEST}/hosts/sun/${SWANCTL_DIR}/x509
+done
+
+# Generate a carol TKM-RSA certificate
+TEST="${TEST_DIR}/tkm/multiple-clients"
+TEST_KEY="${TEST}/hosts/carol/${SWANCTL_DIR}/rsa/carolKey.pem"
+TEST_CERT="${TEST}/hosts/carol/${SWANCTL_DIR}/x509/carolCert.pem"
+CN="carol@strongswan.org"
+SERIAL="03"
+mkdir -p ${TEST}/hosts/carol/${SWANCTL_DIR}/rsa
+mkdir -p ${TEST}/hosts/carol/${SWANCTL_DIR}/x509
+pki --gen --type rsa --size ${RSA_SIZE} --outform pem > ${TEST_KEY}
+pki --issue --cakey ${TKM_RSA_KEY} --cacert ${TKM_RSA_CERT} --type rsa \
+ --in ${TEST_KEY} --not-before "${START}" --not-after "${EE_END}" --san ${CN} \
+ --serial ${SERIAL} --dn "C=CH, O=${PROJECT}, OU=TKM, CN=${CN}" \
+ --rsa-padding pkcs1 --crl ${TKM_RSA_CDP} --outform pem > ${TEST_CERT}
+cp ${TEST_CERT} ${TKM_RSA_DIR}/certs/${SERIAL}.pem
+
+# Generate a dave TKM-RSA certificate
+TEST_KEY="${TEST}/hosts/dave/${SWANCTL_DIR}/rsa/daveKey.pem"
+TEST_CERT="${TEST}/hosts/dave/${SWANCTL_DIR}/x509/daveCert.pem"
+CN="dave@strongswan.org"
+SERIAL="04"
+mkdir -p ${TEST}/hosts/dave/${SWANCTL_DIR}/rsa
+mkdir -p ${TEST}/hosts/dave/${SWANCTL_DIR}/x509
+pki --gen --type rsa --size ${RSA_SIZE} --outform pem > ${TEST_KEY}
+pki --issue --cakey ${TKM_RSA_KEY} --cacert ${TKM_RSA_CERT} --type rsa \
+ --in ${TEST_KEY} --not-before "${START}" --not-after "${EE_END}" --san ${CN} \
+ --serial ${SERIAL} --dn "C=CH, O=${PROJECT}, OU=TKM, CN=${CN}" \
+ --rsa-padding pkcs1 --crl ${TKM_RSA_CDP} --outform pem > ${TEST_CERT}
+cp ${TEST_CERT} ${TKM_RSA_DIR}/certs/${SERIAL}.pem
+
+# Put DER_encoded sun private key tkm/multiple-client scenario
+mkdir -p ${TEST}/hosts/sun/${TKM_DIR}
+mkdir -p ${TEST}/hosts/sun/${SWANCTL_DIR}/x509
+mkdir -p ${TEST}/hosts/sun/${SWANCTL_DIR}/x509ca
+openssl rsa -in ${SUN_KEY} -outform der -out ${TEST}/hosts/sun/${TKM_DIR}/sunKey.der
+cp ${TKM_RSA_CERT_DER} ${TEST}/hosts/sun/${TKM_DIR}
+cp ${SUN_CERT} ${TEST}/hosts/sun/${SWANCTL_DIR}/x509
+cp ${TKM_RSA_CERT} ${TEST}/hosts/sun/${SWANCTL_DIR}/x509ca
+
+# Put dave private key and certificate in tkm/multi-level-ca scenario:
+TEST="${TEST_DIR}/tkm/multi-level-ca"
+mkdir -p ${TEST}/hosts/dave/${SWANCTL_DIR}/rsa
+mkdir -p ${TEST}/hosts/dave/${SWANCTL_DIR}/x509
+cp ${TEST_KEY} ${TEST}/hosts/dave/${SWANCTL_DIR}/rsa
+cp ${TEST_CERT} ${TEST}/hosts/dave/${SWANCTL_DIR}/x509
+
################################################################################
# strongSwan Ed25519 Root CA #
################################################################################
for h in moon
do
TEST_DATA="${TEST_DIR}/tkm/${t}/hosts/moon/etc/strongswan.conf"
- sed -e "s/CA_SPK_HEX/${CA_SPK_HEX}/g" \
- -e "s/CA_SPKI_HEX/${CA_SPKI_HEX}/g" \
+ sed -e "s/CA_SPK_HEX/${TKM_RSA_SPK_HEX}/g" \
+ -e "s/CA_SPKI_HEX/${TKM_RSA_SPKI_HEX}/g" \
-e "s/LEVELS_SPK_HEX/${LEVELS_SPK_HEX}/g" \
${TEST_DATA}.in > ${TEST_DATA}
done
for h in sun
do
TEST_DATA="${TEST_DIR}/tkm/${t}/hosts/${h}/etc/strongswan.conf"
- sed -e "s/CA_SPK_HEX/${CA_SPK_HEX}/g" \
- -e "s/CA_SPKI_HEX/${CA_SPKI_HEX}/g" \
+ sed -e "s/CA_SPK_HEX/${TKM_RSA_SPK_HEX}/g" \
+ -e "s/CA_SPKI_HEX/${TKM_RSA_SPKI_HEX}/g" \
${TEST_DATA}.in > ${TEST_DATA}
done
done
charon-systemd {
load = pem pkcs1 x509 revocation constraints pubkey openssl random nonce curl kernel-netlink socket-default vici
+
+ rsa_pss = no
}
charon-systemd {
load = pem pkcs1 x509 revocation constraints pubkey openssl random nonce curl kernel-netlink socket-default vici
+
+ rsa_pss = no
}
charon-systemd {
load = pem pkcs1 x509 revocation constraints pubkey openssl random nonce curl kernel-netlink socket-default vici
+
+ rsa_pss = no
}
-moon:: cat /var/log/daemon.log::authentication of.*sun.strongswan.org.*with RSA_EMSA_PKCS1_SHA2_512 successful::YES
-sun:: cat /var/log/daemon.log::authentication of.*moon.strongswan.org.*with RSA_EMSA_PKCS1_SHA2_384 successful::YES
+moon:: cat /var/log/daemon.log::authentication of.*sun.strongswan.org.*with RSA_EMSA_PSS_SHA2_512_SALT_64 successful::YES
+sun:: cat /var/log/daemon.log::authentication of.*moon.strongswan.org.*with RSA_EMSA_PSS_SHA2_384_SALT_48 successful::YES
moon::swanctl --list-sas --raw 2> /dev/null::gw-gw.*version=2 state=ESTABLISHED local-host=PH_IP_MOON local-port=500 local-id=moon.strongswan.org remote-host=PH_IP_SUN remote-port=500 remote-id=sun.strongswan.org initiator=yes.*encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128 prf-alg=PRF_HMAC_SHA2_256 dh-group=CURVE_25519.*child-sas.*net-net.*state=INSTALLED mode=TUNNEL.*ESP.*encr-alg=AES_GCM_16 encr-keysize=128.*local-ts=\[10.1.0.0/16] remote-ts=\[10.2.0.0/16]::YES
sun:: swanctl --list-sas --raw 2> /dev/null::gw-gw.*version=2 state=ESTABLISHED local-host=PH_IP_SUN local-port=500 local-id=sun.strongswan.org remote-host=PH_IP_MOON remote-port=500 remote-id=moon.strongswan.org.*encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128 prf-alg=PRF_HMAC_SHA2_256 dh-group=CURVE_25519.*child-sas.*net-net.*state=INSTALLED mode=TUNNEL.*ESP.*encr-alg=AES_GCM_16 encr-keysize=128.*local-ts=\[10.2.0.0/16] remote-ts=\[10.1.0.0/16]::YES
alice::ping -c 1 PH_IP_BOB::64 bytes from PH_IP_BOB: icmp_.eq=1::YES
to only allow access to the <b>research</b> and <b>accounting</b> subnets if
specific algorithms are used.
<p/>
-<b>Note:</b> Because the client certificate's are signedwith SHA-256 we have to
+<b>Note:</b> Because the client certificate's are signed with SHA-256 we have to
accept that algorithm too because signature schemes in <b>rightauth</b> are also
used as constraints for the whole certificate chain.
Therefore, <b>carol</b> obtains access to the <b>research</b> subnet behind gateway
dave :: swanctl --list-sas --raw 2> /dev/null::home.*version=2 state=ESTABLISHED local-host=192.168.0.200 local-port=4500 local-id=dave@strongswan.org remote-host=192.168.0.1 remote-port=4500 remote-id=moon.strongswan.org initiator=yes.*encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128 prf-alg=PRF_HMAC_SHA2_256 dh-group=CURVE_25519.*child-sas.*venus.*state=INSTALLED mode=TUNNEL.*ESP.*encr-alg=AES_GCM_16 encr-keysize=128.*local-ts=\[192.168.0.200/32] remote-ts=\[10.1.0.20/32]::YES
moon :: swanctl --list-sas --ike-id 1 --raw 2> /dev/null::research.*version=2 state=ESTABLISHED local-host=192.168.0.1 local-port=4500 local-id=moon.strongswan.org remote-host=192.168.0.100 remote-port=4500 remote-id=carol@strongswan.org.*encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128 prf-alg=PRF_HMAC_SHA2_256 dh-group=CURVE_25519.*child-sas.*alice-net.*reqid=1 state=INSTALLED mode=TUNNEL.*ESP.*encr-alg=AES_GCM_16 encr-keysize=128.*local-ts=\[10.1.0.10/32] remote-ts=\[192.168.0.100/32]::YES
moon :: swanctl --list-sas --ike-id 2 --raw 2> /dev/null::accounting.*version=2 state=ESTABLISHED local-host=192.168.0.1 local-port=4500 local-id=moon.strongswan.org remote-host=192.168.0.200 remote-port=4500 remote-id=dave@strongswan.org.*encr-alg=AES_CBC encr-keysize=128 integ-alg=HMAC_SHA2_256_128 prf-alg=PRF_HMAC_SHA2_256 dh-group=CURVE_25519.*child-sas.*venus-net.*reqid=2 state=INSTALLED mode=TUNNEL.*ESP.*encr-alg=AES_GCM_16 encr-keysize=128.*local-ts=\[10.1.0.20/32] remote-ts=\[192.168.0.200/32]::YES
-carol::cat /var/log/daemon.log::authentication of .*moon.strongswan.org.* with RSA.* successful::YES
-moon ::cat /var/log/daemon.log::authentication of .*carol@strongswan.org.* with RSA_EMSA_PKCS1_SHA2_384 successful::YES
-dave ::cat /var/log/daemon.log::authentication of .*moon.strongswan.org.* with RSA.* successful::YES
-moon ::cat /var/log/daemon.log::authentication of .*dave@strongswan.org.* with RSA_EMSA_PKCS1_SHA2_512 successful::YES
+carol::cat /var/log/daemon.log::authentication of .*moon.strongswan.org.* with RSA_EMSA_PSS_SHA2_256_SALT_32 successful::YES
+moon ::cat /var/log/daemon.log::authentication of .*carol@strongswan.org.* with RSA_EMSA_PSS_SHA2_384_SALT_48 successful::YES
+dave ::cat /var/log/daemon.log::authentication of .*moon.strongswan.org.* with RSA_EMSA_PSS_SHA2_256_SALT_32 successful::YES
+moon ::cat /var/log/daemon.log::authentication of .*dave@strongswan.org.* with RSA_EMSA_PSS_SHA2_512_SALT_64 successful::YES
moon ::cat /var/log/daemon.log::traffic selectors 10.1.0.20/32 === 192.168.0.100/32 unacceptable::YES
moon ::cat /var/log/daemon.log::traffic selectors 10.1.0.10/32 === 192.168.0.200/32 unacceptable::YES
carol::ping -c 1 PH_IP_ALICE::64 bytes from PH_IP_ALICE: icmp_.eq=1::YES
*.der
*.pem
-strongswan.conf
--- /dev/null
+strongswan.conf
charon-systemd {
load = pem pkcs1 random nonce openssl curl revocation xcbc vici kernel-netlink socket-default updown
+
+ rsa_pss = no
}
--- /dev/null
+strongswan.conf
charon-systemd {
load = pem pkcs1 random nonce openssl curl revocation xcbc vici kernel-netlink socket-default updown
+
+ rsa_pss = no
}
--- /dev/null
+strongswan.conf
charon-systemd {
load = pem pkcs1 random nonce openssl curl revocation xcbc vici kernel-netlink socket-default updown
+
+ rsa_pss = no
}
--- /dev/null
+# /etc/strongswan.conf - strongSwan configuration file
+
+swanctl {
+ load = pem pkcs1 openssl revocation random
+}
+
+charon-systemd {
+ load = pem pkcs1 random nonce openssl curl revocation xcbc vici kernel-netlink socket-default updown
+
+ rsa_pss = no
+}
--- /dev/null
+# /etc/strongswan.conf - strongSwan configuration file
+
+swanctl {
+ load = pem pkcs1 openssl revocation random
+}
+
+charon-systemd {
+ load = pem pkcs1 random nonce openssl curl revocation xcbc vici kernel-netlink socket-default updown
+
+ rsa_pss = no
+}
--- /dev/null
+strongswan.conf
charon-systemd {
load = pem pkcs1 random nonce openssl curl revocation xcbc vici kernel-netlink socket-default updown
+
+ rsa_pss = no
}
charon-systemd {
load = pem pkcs1 random nonce openssl curl revocation xcbc vici kernel-netlink socket-default updown
+
+ rsa_pss = no
}
--- /dev/null
+strongswan.conf
--- /dev/null
+strongswan.conf
charon-systemd {
load = pem pkcs1 random nonce openssl curl revocation xcbc vici kernel-netlink socket-default updown
+
+ rsa_pss = no
}
--- /dev/null
+strongswan.conf
charon-systemd {
load = pem pkcs1 random nonce openssl curl revocation xcbc vici kernel-netlink socket-default updown
+
+ rsa_pss = noS
}
--- /dev/null
+strongswan.conf
charon-systemd {
load = pem pkcs1 random nonce openssl curl revocation xcbc vici kernel-netlink socket-default updown
+
+ rsa_pss = no
}
--- /dev/null
+strongswan.conf
charon-systemd {
load = pem pkcs1 random nonce openssl curl revocation xcbc vici kernel-netlink socket-default updown
+
+ rsa_pss = no
}