mirror of https://github.com/openssl/openssl.git
Compare commits
8 Commits
2ca3b64c96
...
78286a9f2f
| Author | SHA1 | Date |
|---|---|---|
|
|
78286a9f2f | |
|
|
296f1f6dd8 | |
|
|
fd7fc90346 | |
|
|
fcb5e20ac7 | |
|
|
b9ff440dd6 | |
|
|
f77fafd16e | |
|
|
f12f8cc035 | |
|
|
a7d856932b |
|
|
@ -371,7 +371,7 @@ const OPTIONS cmp_options[] = {
|
||||||
{"disable_confirm", OPT_DISABLE_CONFIRM, '-',
|
{"disable_confirm", OPT_DISABLE_CONFIRM, '-',
|
||||||
"Do not confirm newly enrolled certificate w/o requesting implicit"},
|
"Do not confirm newly enrolled certificate w/o requesting implicit"},
|
||||||
{OPT_MORE_STR, 0, 0,
|
{OPT_MORE_STR, 0, 0,
|
||||||
"confirmation. WARNING: This leads to behavior violating RFC 4210"},
|
"confirmation. WARNING: This leads to behavior violating RFC 9810"},
|
||||||
{"certout", OPT_CERTOUT, 's',
|
{"certout", OPT_CERTOUT, 's',
|
||||||
"File to save newly enrolled certificate"},
|
"File to save newly enrolled certificate"},
|
||||||
{"chainout", OPT_CHAINOUT, 's',
|
{"chainout", OPT_CHAINOUT, 's',
|
||||||
|
|
@ -440,7 +440,7 @@ const OPTIONS cmp_options[] = {
|
||||||
{OPT_MORE_STR, 0, 0,
|
{OPT_MORE_STR, 0, 0,
|
||||||
"certificate responses (ip/cp/kup), revocation responses (rp), and PKIConf"},
|
"certificate responses (ip/cp/kup), revocation responses (rp), and PKIConf"},
|
||||||
{OPT_MORE_STR, 0, 0,
|
{OPT_MORE_STR, 0, 0,
|
||||||
"WARNING: This setting leads to behavior allowing violation of RFC 4210"},
|
"WARNING: This setting leads to behavior allowing violation of RFC 9810"},
|
||||||
{"no_cache_extracerts", OPT_NO_CACHE_EXTRACERTS, '-',
|
{"no_cache_extracerts", OPT_NO_CACHE_EXTRACERTS, '-',
|
||||||
"Do not keep certificates received in the extraCerts CMP message field"},
|
"Do not keep certificates received in the extraCerts CMP message field"},
|
||||||
{ "srvcertout", OPT_SRVCERTOUT, 's',
|
{ "srvcertout", OPT_SRVCERTOUT, 's',
|
||||||
|
|
@ -623,7 +623,7 @@ const OPTIONS cmp_options[] = {
|
||||||
{OPT_MORE_STR, 0, 0,
|
{OPT_MORE_STR, 0, 0,
|
||||||
"certificate responses (ip/cp/kup), and revocation responses (rp)."},
|
"certificate responses (ip/cp/kup), and revocation responses (rp)."},
|
||||||
{OPT_MORE_STR, 0, 0,
|
{OPT_MORE_STR, 0, 0,
|
||||||
"WARNING: This setting leads to behavior violating RFC 4210"},
|
"WARNING: This setting leads to behavior violating RFC 9810"},
|
||||||
{"accept_unprotected", OPT_ACCEPT_UNPROTECTED, '-',
|
{"accept_unprotected", OPT_ACCEPT_UNPROTECTED, '-',
|
||||||
"Accept missing or invalid protection of requests"},
|
"Accept missing or invalid protection of requests"},
|
||||||
{"accept_unprot_err", OPT_ACCEPT_UNPROT_ERR, '-',
|
{"accept_unprot_err", OPT_ACCEPT_UNPROT_ERR, '-',
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,6 @@ EOF
|
||||||
|
|
||||||
my %cmd_disabler = (
|
my %cmd_disabler = (
|
||||||
ciphers => "sock",
|
ciphers => "sock",
|
||||||
genrsa => "rsa",
|
|
||||||
gendsa => "dsa",
|
gendsa => "dsa",
|
||||||
dsaparam => "dsa",
|
dsaparam => "dsa",
|
||||||
gendh => "dh",
|
gendh => "dh",
|
||||||
|
|
@ -107,7 +106,7 @@ EOF
|
||||||
# [2] = preprocessor conditional for excluding irrespective of deprecation
|
# [2] = preprocessor conditional for excluding irrespective of deprecation
|
||||||
# rsa => [ "pkey", "3_0", "rsa" ],
|
# rsa => [ "pkey", "3_0", "rsa" ],
|
||||||
# genrsa => [ "genpkey", "3_0", "rsa" ],
|
# genrsa => [ "genpkey", "3_0", "rsa" ],
|
||||||
rsautl => [ "pkeyutl", "3_0", "rsa" ],
|
rsautl => [ "pkeyutl", "3_0", "" ],
|
||||||
# dhparam => [ "pkeyparam", "3_0", "dh" ],
|
# dhparam => [ "pkeyparam", "3_0", "dh" ],
|
||||||
# dsaparam => [ "pkeyparam", "3_0", "dsa" ],
|
# dsaparam => [ "pkeyparam", "3_0", "dsa" ],
|
||||||
# dsa => [ "pkey", "3_0", "dsa" ],
|
# dsa => [ "pkey", "3_0", "dsa" ],
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
#include <openssl/cmp.h>
|
#include <openssl/cmp.h>
|
||||||
#include <openssl/crmf.h>
|
#include <openssl/crmf.h>
|
||||||
|
|
||||||
/* ASN.1 declarations from RFC4210 */
|
/* ASN.1 declarations from RFC 9810 */
|
||||||
ASN1_SEQUENCE(OSSL_CMP_REVANNCONTENT) = {
|
ASN1_SEQUENCE(OSSL_CMP_REVANNCONTENT) = {
|
||||||
/* OSSL_CMP_PKISTATUS is effectively ASN1_INTEGER so it is used directly */
|
/* OSSL_CMP_PKISTATUS is effectively ASN1_INTEGER so it is used directly */
|
||||||
ASN1_SIMPLE(OSSL_CMP_REVANNCONTENT, status, ASN1_INTEGER),
|
ASN1_SIMPLE(OSSL_CMP_REVANNCONTENT, status, ASN1_INTEGER),
|
||||||
|
|
|
||||||
|
|
@ -566,11 +566,11 @@ static X509 *get1_cert_status(OSSL_CMP_CTX *ctx, int bodytype,
|
||||||
* ctx->certConf_cb_arg, which has been initialized using opt_out_trusted, and
|
* ctx->certConf_cb_arg, which has been initialized using opt_out_trusted, and
|
||||||
* ctx->untrusted, which at this point already contains msg->extraCerts.
|
* ctx->untrusted, which at this point already contains msg->extraCerts.
|
||||||
* Returns 0 on acceptance, else a bit field reflecting PKIFailureInfo.
|
* Returns 0 on acceptance, else a bit field reflecting PKIFailureInfo.
|
||||||
* Quoting from RFC 4210 section 5.1. Overall PKI Message:
|
* Quoting from RFC 9810 section 5.1. Overall PKI Message:
|
||||||
* The extraCerts field can contain certificates that may be useful to
|
* The extraCerts field can contain certificates that may be useful to
|
||||||
* the recipient. For example, this can be used by a CA or RA to
|
* the recipient. For example, this can be used by a CA or RA to
|
||||||
* present an end entity with certificates that it needs to verify its
|
* present an end entity with certificates that it needs to verify its
|
||||||
* own new certificate (if, for example, the CA that issued the end
|
* own new certificate (for example, if the CA that issued the end
|
||||||
* entity's certificate is not a root CA for the end entity). Note that
|
* entity's certificate is not a root CA for the end entity). Note that
|
||||||
* this field does not necessarily contain a certification path; the
|
* this field does not necessarily contain a certification path; the
|
||||||
* recipient may have to sort, select from, or otherwise process the
|
* recipient may have to sort, select from, or otherwise process the
|
||||||
|
|
|
||||||
|
|
@ -1151,7 +1151,7 @@ X509 *ossl_cmp_certresponse_get1_cert(const OSSL_CMP_CTX *ctx, const OSSL_CMP_CE
|
||||||
crt = X509_dup(coec->value.certificate);
|
crt = X509_dup(coec->value.certificate);
|
||||||
break;
|
break;
|
||||||
case OSSL_CMP_CERTORENCCERT_ENCRYPTEDCERT:
|
case OSSL_CMP_CERTORENCCERT_ENCRYPTEDCERT:
|
||||||
/* cert encrypted for indirect PoP; RFC 4210, 5.2.8.2 */
|
/* cert encrypted for indirect PoP; RFC 9810, 5.2.8.3.2 */
|
||||||
pkey = OSSL_CMP_CTX_get0_newPkey(ctx, 1);
|
pkey = OSSL_CMP_CTX_get0_newPkey(ctx, 1);
|
||||||
/* pkey is ctx->newPkey (if private, else NULL) or ctx->pkey */
|
/* pkey is ctx->newPkey (if private, else NULL) or ctx->pkey */
|
||||||
if (pkey == NULL) {
|
if (pkey == NULL) {
|
||||||
|
|
|
||||||
|
|
@ -298,7 +298,7 @@ int ossl_cmp_msg_protect(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* As required by RFC 4210 section 5.1.1., if the sender name is not known
|
* As required by RFC 9810 section 5.1.1., if the sender name is not known
|
||||||
* to the client it set to NULL-DN. In this case for identification at least
|
* to the client it set to NULL-DN. In this case for identification at least
|
||||||
* the senderKID must be set, where we took the referenceValue as fallback.
|
* the senderKID must be set, where we took the referenceValue as fallback.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -587,7 +587,7 @@ int OSSL_CMP_validate_msg(OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *msg)
|
||||||
}
|
}
|
||||||
if (verify_PBMAC(ctx, msg)) {
|
if (verify_PBMAC(ctx, msg)) {
|
||||||
/*
|
/*
|
||||||
* RFC 4210, 5.3.2: 'Note that if the PKI Message Protection is
|
* RFC 9810, 5.3.2: 'Note that if the PKI message protection is
|
||||||
* "shared secret information", then any certificate transported in
|
* "shared secret information", then any certificate transported in
|
||||||
* the caPubs field may be directly trusted as a root CA
|
* the caPubs field may be directly trusted as a root CA
|
||||||
* certificate by the initiator.'
|
* certificate by the initiator.'
|
||||||
|
|
@ -838,7 +838,7 @@ int ossl_cmp_msg_check_update(OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *msg,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* RFC 4210 section 5.1.1 states: the recipNonce is copied from
|
* RFC 9810 section 5.1.1 states: the recipNonce is copied from
|
||||||
* the senderNonce of the previous message in the transaction.
|
* the senderNonce of the previous message in the transaction.
|
||||||
* --> Store for setting in next message
|
* --> Store for setting in next message
|
||||||
*/
|
*/
|
||||||
|
|
@ -847,7 +847,7 @@ int ossl_cmp_msg_check_update(OSSL_CMP_CTX *ctx, const OSSL_CMP_MSG *msg,
|
||||||
|
|
||||||
if (ossl_cmp_hdr_get_protection_nid(hdr) == NID_id_PasswordBasedMAC) {
|
if (ossl_cmp_hdr_get_protection_nid(hdr) == NID_id_PasswordBasedMAC) {
|
||||||
/*
|
/*
|
||||||
* RFC 4210, 5.3.2: 'Note that if the PKI Message Protection is
|
* RFC 9810, 5.3.2: 'Note that if the PKI message protection is
|
||||||
* "shared secret information", then any certificate transported in
|
* "shared secret information", then any certificate transported in
|
||||||
* the caPubs field may be directly trusted as a root CA
|
* the caPubs field may be directly trusted as a root CA
|
||||||
* certificate by the initiator.'
|
* certificate by the initiator.'
|
||||||
|
|
|
||||||
|
|
@ -866,7 +866,7 @@ unsigned char
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Decrypts the certificate in the given encryptedValue using private key pkey.
|
* Decrypts the certificate in the given encryptedValue using private key pkey.
|
||||||
* This is needed for the indirect PoP method as in RFC 4210 section 5.2.8.2.
|
* This is needed for the indirect PoP method as in RFC 9810 section 5.2.8.3.2.
|
||||||
*
|
*
|
||||||
* returns a pointer to the decrypted certificate
|
* returns a pointer to the decrypted certificate
|
||||||
* returns NULL on error or if no certificate available
|
* returns NULL on error or if no certificate available
|
||||||
|
|
@ -896,7 +896,7 @@ X509 *OSSL_CRMF_ENCRYPTEDVALUE_get1_encCert(const OSSL_CRMF_ENCRYPTEDVALUE *ecer
|
||||||
}
|
}
|
||||||
/*-
|
/*-
|
||||||
* Decrypts the certificate in the given encryptedKey using private key pkey.
|
* Decrypts the certificate in the given encryptedKey using private key pkey.
|
||||||
* This is needed for the indirect PoP method as in RFC 4210 section 5.2.8.2.
|
* This is needed for the indirect PoP method as in RFC 9810 section 5.2.8.3.2.
|
||||||
*
|
*
|
||||||
* returns a pointer to the decrypted certificate
|
* returns a pointer to the decrypted certificate
|
||||||
* returns NULL on error or if no certificate available
|
* returns NULL on error or if no certificate available
|
||||||
|
|
|
||||||
|
|
@ -261,10 +261,12 @@ int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx,
|
||||||
|
|
||||||
cipher = ctx->op.ciph.cipher;
|
cipher = ctx->op.ciph.cipher;
|
||||||
desc = cipher->description != NULL ? cipher->description : "";
|
desc = cipher->description != NULL ? cipher->description : "";
|
||||||
|
ERR_set_mark();
|
||||||
ret = cipher->encrypt(ctx->op.ciph.algctx, out, outlen, (out == NULL ? 0 : *outlen), in, inlen);
|
ret = cipher->encrypt(ctx->op.ciph.algctx, out, outlen, (out == NULL ? 0 : *outlen), in, inlen);
|
||||||
if (ret <= 0)
|
if (ret <= 0 && ERR_count_to_mark() == 0)
|
||||||
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_ASYM_CIPHER_FAILURE,
|
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_ASYM_CIPHER_FAILURE,
|
||||||
"%s encrypt:%s", cipher->type_name, desc);
|
"%s encrypt:%s", cipher->type_name, desc);
|
||||||
|
ERR_clear_last_mark();
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
legacy:
|
legacy:
|
||||||
|
|
@ -309,10 +311,12 @@ int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx,
|
||||||
|
|
||||||
cipher = ctx->op.ciph.cipher;
|
cipher = ctx->op.ciph.cipher;
|
||||||
desc = cipher->description != NULL ? cipher->description : "";
|
desc = cipher->description != NULL ? cipher->description : "";
|
||||||
|
ERR_set_mark();
|
||||||
ret = cipher->decrypt(ctx->op.ciph.algctx, out, outlen, (out == NULL ? 0 : *outlen), in, inlen);
|
ret = cipher->decrypt(ctx->op.ciph.algctx, out, outlen, (out == NULL ? 0 : *outlen), in, inlen);
|
||||||
if (ret <= 0)
|
if (ret <= 0 && ERR_count_to_mark() == 0)
|
||||||
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_ASYM_CIPHER_FAILURE,
|
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_ASYM_CIPHER_FAILURE,
|
||||||
"%s decrypt:%s", cipher->type_name, desc);
|
"%s decrypt:%s", cipher->type_name, desc);
|
||||||
|
ERR_clear_last_mark();
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -460,10 +460,12 @@ void *evp_keymgmt_gen(const EVP_KEYMGMT *keymgmt, void *genctx,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ERR_set_mark();
|
||||||
ret = keymgmt->gen(genctx, cb, cbarg);
|
ret = keymgmt->gen(genctx, cb, cbarg);
|
||||||
if (ret == NULL)
|
if (ret == NULL && ERR_count_to_mark() == 0)
|
||||||
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_KEYMGMT_FAILURE,
|
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_KEYMGMT_FAILURE,
|
||||||
"%s key generation:%s", keymgmt->type_name, desc);
|
"%s key generation:%s", keymgmt->type_name, desc);
|
||||||
|
ERR_clear_last_mark();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -426,10 +426,12 @@ int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ERR_set_mark();
|
||||||
ret = signature->digest_sign_update(pctx->op.sig.algctx, data, dsize);
|
ret = signature->digest_sign_update(pctx->op.sig.algctx, data, dsize);
|
||||||
if (ret <= 0)
|
if (ret <= 0 && ERR_count_to_mark() == 0)
|
||||||
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
|
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
|
||||||
"%s digest_sign_update:%s", signature->type_name, desc);
|
"%s digest_sign_update:%s", signature->type_name, desc);
|
||||||
|
ERR_clear_last_mark();
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
legacy:
|
legacy:
|
||||||
|
|
@ -474,10 +476,12 @@ int EVP_DigestVerifyUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ERR_set_mark();
|
||||||
ret = signature->digest_verify_update(pctx->op.sig.algctx, data, dsize);
|
ret = signature->digest_verify_update(pctx->op.sig.algctx, data, dsize);
|
||||||
if (ret <= 0)
|
if (ret <= 0 && ERR_count_to_mark() == 0)
|
||||||
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
|
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
|
||||||
"%s digest_verify_update:%s", signature->type_name, desc);
|
"%s digest_verify_update:%s", signature->type_name, desc);
|
||||||
|
ERR_clear_last_mark();
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
legacy:
|
legacy:
|
||||||
|
|
@ -527,11 +531,13 @@ int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret,
|
||||||
pctx = dctx;
|
pctx = dctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ERR_set_mark();
|
||||||
r = signature->digest_sign_final(pctx->op.sig.algctx, sigret, siglen,
|
r = signature->digest_sign_final(pctx->op.sig.algctx, sigret, siglen,
|
||||||
sigret == NULL ? 0 : *siglen);
|
sigret == NULL ? 0 : *siglen);
|
||||||
if (!r)
|
if (!r && ERR_count_to_mark() == 0)
|
||||||
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
|
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
|
||||||
"%s digest_sign_final:%s", signature->type_name, desc);
|
"%s digest_sign_final:%s", signature->type_name, desc);
|
||||||
|
ERR_clear_last_mark();
|
||||||
if (dctx == NULL && sigret != NULL)
|
if (dctx == NULL && sigret != NULL)
|
||||||
ctx->flags |= EVP_MD_CTX_FLAG_FINALISED;
|
ctx->flags |= EVP_MD_CTX_FLAG_FINALISED;
|
||||||
else
|
else
|
||||||
|
|
@ -638,11 +644,13 @@ int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen,
|
||||||
|
|
||||||
if (sigret != NULL)
|
if (sigret != NULL)
|
||||||
ctx->flags |= EVP_MD_CTX_FLAG_FINALISED;
|
ctx->flags |= EVP_MD_CTX_FLAG_FINALISED;
|
||||||
|
ERR_set_mark();
|
||||||
ret = signature->digest_sign(pctx->op.sig.algctx, sigret, siglen,
|
ret = signature->digest_sign(pctx->op.sig.algctx, sigret, siglen,
|
||||||
sigret == NULL ? 0 : *siglen, tbs, tbslen);
|
sigret == NULL ? 0 : *siglen, tbs, tbslen);
|
||||||
if (ret <= 0)
|
if (ret <= 0 && ERR_count_to_mark() == 0)
|
||||||
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
|
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
|
||||||
"%s digest_sign:%s", signature->type_name, desc);
|
"%s digest_sign:%s", signature->type_name, desc);
|
||||||
|
ERR_clear_last_mark();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -693,10 +701,12 @@ int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig,
|
||||||
pctx = dctx;
|
pctx = dctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ERR_set_mark();
|
||||||
r = signature->digest_verify_final(pctx->op.sig.algctx, sig, siglen);
|
r = signature->digest_verify_final(pctx->op.sig.algctx, sig, siglen);
|
||||||
if (!r)
|
if (!r && ERR_count_to_mark() == 0)
|
||||||
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
|
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
|
||||||
"%s digest_verify_final:%s", signature->type_name, desc);
|
"%s digest_verify_final:%s", signature->type_name, desc);
|
||||||
|
ERR_clear_last_mark();
|
||||||
if (dctx == NULL)
|
if (dctx == NULL)
|
||||||
ctx->flags |= EVP_MD_CTX_FLAG_FINALISED;
|
ctx->flags |= EVP_MD_CTX_FLAG_FINALISED;
|
||||||
else
|
else
|
||||||
|
|
@ -769,10 +779,12 @@ int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret,
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ctx->flags |= EVP_MD_CTX_FLAG_FINALISED;
|
ctx->flags |= EVP_MD_CTX_FLAG_FINALISED;
|
||||||
|
ERR_set_mark();
|
||||||
ret = signature->digest_verify(pctx->op.sig.algctx, sigret, siglen, tbs, tbslen);
|
ret = signature->digest_verify(pctx->op.sig.algctx, sigret, siglen, tbs, tbslen);
|
||||||
if (ret <= 0)
|
if (ret <= 0 && ERR_count_to_mark() == 0)
|
||||||
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
|
ERR_raise_data(ERR_LIB_EVP, EVP_R_PROVIDER_SIGNATURE_FAILURE,
|
||||||
"%s digest_verify:%s", signature->type_name, desc);
|
"%s digest_verify:%s", signature->type_name, desc);
|
||||||
|
ERR_clear_last_mark();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -2419,6 +2419,11 @@ static int core_pop_error_to_mark(const OSSL_CORE_HANDLE *handle)
|
||||||
return ERR_pop_to_mark();
|
return ERR_pop_to_mark();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int core_count_to_mark(const OSSL_CORE_HANDLE *handle)
|
||||||
|
{
|
||||||
|
return ERR_count_to_mark();
|
||||||
|
}
|
||||||
|
|
||||||
static void core_indicator_get_callback(OPENSSL_CORE_CTX *libctx,
|
static void core_indicator_get_callback(OPENSSL_CORE_CTX *libctx,
|
||||||
OSSL_INDICATOR_CALLBACK **cb)
|
OSSL_INDICATOR_CALLBACK **cb)
|
||||||
{
|
{
|
||||||
|
|
@ -2600,6 +2605,7 @@ static const OSSL_DISPATCH core_dispatch_[] = {
|
||||||
{ OSSL_FUNC_CORE_CLEAR_LAST_ERROR_MARK,
|
{ OSSL_FUNC_CORE_CLEAR_LAST_ERROR_MARK,
|
||||||
(void (*)(void))core_clear_last_error_mark },
|
(void (*)(void))core_clear_last_error_mark },
|
||||||
{ OSSL_FUNC_CORE_POP_ERROR_TO_MARK, (void (*)(void))core_pop_error_to_mark },
|
{ OSSL_FUNC_CORE_POP_ERROR_TO_MARK, (void (*)(void))core_pop_error_to_mark },
|
||||||
|
{ OSSL_FUNC_CORE_COUNT_TO_MARK, (void (*)(void))core_count_to_mark },
|
||||||
{ OSSL_FUNC_BIO_NEW_FILE, (void (*)(void))ossl_core_bio_new_file },
|
{ OSSL_FUNC_BIO_NEW_FILE, (void (*)(void))ossl_core_bio_new_file },
|
||||||
{ OSSL_FUNC_BIO_NEW_MEMBUF, (void (*)(void))ossl_core_bio_new_mem_buf },
|
{ OSSL_FUNC_BIO_NEW_MEMBUF, (void (*)(void))ossl_core_bio_new_mem_buf },
|
||||||
{ OSSL_FUNC_BIO_READ_EX, (void (*)(void))ossl_core_bio_read_ex },
|
{ OSSL_FUNC_BIO_READ_EX, (void (*)(void))ossl_core_bio_read_ex },
|
||||||
|
|
|
||||||
|
|
@ -150,7 +150,7 @@ The function does not protect the message if I<unprotectedErrors> is nonzero.
|
||||||
|
|
||||||
=head1 NOTES
|
=head1 NOTES
|
||||||
|
|
||||||
CMP is specified in RFC 4210 (and CRMF in RFC 4211).
|
CMP is specified in RFC 9810 (and CRMF in RFC 4211).
|
||||||
|
|
||||||
=head1 RETURN VALUES
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ ossl_cmp_ctx_set1_recipNonce() sets the given recipient nonce in the context.
|
||||||
|
|
||||||
=head1 NOTES
|
=head1 NOTES
|
||||||
|
|
||||||
CMP is defined in RFC 4210 (and CRMF in RFC 4211).
|
CMP is defined in RFC 9810.
|
||||||
|
|
||||||
=head1 RETURN VALUES
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@ PKIHeader to the given X509 Name value, without consuming the pointer.
|
||||||
If B<nm> is NULL, recipient is set to the NULL DN (the empty list of strings).
|
If B<nm> is NULL, recipient is set to the NULL DN (the empty list of strings).
|
||||||
|
|
||||||
ossl_cmp_hdr_update_messagetime() (re-)sets the messageTime to the current
|
ossl_cmp_hdr_update_messagetime() (re-)sets the messageTime to the current
|
||||||
system time. As written in RFC 4210, section 5.1.1:
|
system time. As written in RFC 9810, section 5.1.1:
|
||||||
The messageTime field contains the time at which the sender created the message.
|
The messageTime field contains the time at which the sender created the message.
|
||||||
This may be useful to allow end entities to correct/check their local time for
|
This may be useful to allow end entities to correct/check their local time for
|
||||||
consistency with the time on a central system.
|
consistency with the time on a central system.
|
||||||
|
|
@ -109,13 +109,13 @@ values in the given OSSL_CMP_CTX structure.
|
||||||
This starts a new transaction in case ctx->transactionID is NULL.
|
This starts a new transaction in case ctx->transactionID is NULL.
|
||||||
The sender name is copied from the subject of the client cert, if any,
|
The sender name is copied from the subject of the client cert, if any,
|
||||||
or else from the subject name provided for certification requests.
|
or else from the subject name provided for certification requests.
|
||||||
As required by RFC 4210 section 5.1.1., if the sender name is not known
|
As required by RFC 9810 section 5.1.1., if the sender name is not known
|
||||||
to the client it set to the NULL-DN. In this case for identification at least
|
to the client it set to the NULL-DN. In this case for identification at least
|
||||||
the senderKID must be set, which we take from any referenceValue provided.
|
the senderKID must be set, which we take from any referenceValue provided.
|
||||||
|
|
||||||
=head1 NOTES
|
=head1 NOTES
|
||||||
|
|
||||||
CMP is defined in RFC 4210 (and CRMF in RFC 4211).
|
CMP is defined in RFC 9810.
|
||||||
|
|
||||||
=head1 RETURN VALUES
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,7 @@ the client should wait for the next poll.
|
||||||
|
|
||||||
=head1 NOTES
|
=head1 NOTES
|
||||||
|
|
||||||
CMP is defined in RFC 4210 (and CRMF in RFC 4211).
|
CMP is defined in RFC 9810 (and CRMF in RFC 4211).
|
||||||
|
|
||||||
=head1 RETURN VALUES
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ If all checks pass then ossl_cmp_msg_check_update()
|
||||||
records in B<ctx> the senderNonce of the received message as the new recipNonce
|
records in B<ctx> the senderNonce of the received message as the new recipNonce
|
||||||
and learns the transaction ID if none is currently present in B<ctx>.
|
and learns the transaction ID if none is currently present in B<ctx>.
|
||||||
|
|
||||||
Moreover, according to RFC 4210 section 5.3.2, if the message protection is
|
Moreover, according to RFC 9810 section 5.3.2, if the message protection is
|
||||||
PBM-based then any certificates in the caPubs field are added to the list of
|
PBM-based then any certificates in the caPubs field are added to the list of
|
||||||
trusted certificates (if set via L<OSSL_CMP_CTX_set0_trusted(3)>).
|
trusted certificates (if set via L<OSSL_CMP_CTX_set0_trusted(3)>).
|
||||||
This way these certs are available for validating subsequent messages in the
|
This way these certs are available for validating subsequent messages in the
|
||||||
|
|
|
||||||
|
|
@ -107,7 +107,7 @@ Returns 1 on success, 0 on error.
|
||||||
|
|
||||||
=head1 NOTES
|
=head1 NOTES
|
||||||
|
|
||||||
CMP is defined in RFC 4210 (and CRMF in RFC 4211).
|
CMP is defined in RFC 9810.
|
||||||
|
|
||||||
=head1 RETURN VALUES
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ of the chain, i.e, the trust anchor (unless it is part of extraCertsOut).
|
||||||
|
|
||||||
=head1 NOTES
|
=head1 NOTES
|
||||||
|
|
||||||
CMP is defined in RFC 4210 (and CRMF in RFC 4211).
|
CMP is defined in RFC 9810.
|
||||||
|
|
||||||
The I<ctx> parameter of ossl_cmp_msg_add_extraCerts()
|
The I<ctx> parameter of ossl_cmp_msg_add_extraCerts()
|
||||||
and thus also of ossl_cmp_msg_protect() cannot be made I<const>
|
and thus also of ossl_cmp_msg_protect() cannot be made I<const>
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ Uses data from I<ctx>, which in case of indirect POPO includes the private key.
|
||||||
ossl_cmp_pkisi_get_status() returns the PKIStatus of I<si>, or -1 on error.
|
ossl_cmp_pkisi_get_status() returns the PKIStatus of I<si>, or -1 on error.
|
||||||
|
|
||||||
ossl_cmp_PKIStatus_to_string() returns a human-readable string representing
|
ossl_cmp_PKIStatus_to_string() returns a human-readable string representing
|
||||||
the PKIStatus values as specified in RFC 4210, Appendix F.
|
the PKIStatus values as specified in RFC 9810, Appendix F.
|
||||||
|
|
||||||
ossl_cmp_pkisi_get0_statusString() returns a direct pointer to the statusString
|
ossl_cmp_pkisi_get0_statusString() returns a direct pointer to the statusString
|
||||||
field contained in I<si>.
|
field contained in I<si>.
|
||||||
|
|
@ -73,7 +73,7 @@ with index I<index> in the PKIFailureInfo of the I<si>, or -1 on error.
|
||||||
|
|
||||||
=head1 NOTES
|
=head1 NOTES
|
||||||
|
|
||||||
CMP is defined in RFC 4210 (and CRMF in RFC 4211).
|
CMP is defined in RFC 9810.
|
||||||
|
|
||||||
=head1 RETURN VALUES
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|
||||||
openssl-cmp - Certificate Management Protocol (CMP, RFC 4210) application
|
openssl-cmp - Certificate Management Protocol (CMP, RFCs 9810 and 9811) application
|
||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
|
@ -171,7 +171,8 @@ Certificate verification options, for both CMP and TLS:
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
The B<cmp> command is a client implementation for the Certificate
|
The B<cmp> command is a client implementation for the Certificate
|
||||||
Management Protocol (CMP) as defined in RFC4210.
|
Management Protocol (CMP) as defined in RFCs 9810 and
|
||||||
|
its HTTP(S) transfer as defined in RFC 9811.
|
||||||
It can be used to request certificates from a CA server,
|
It can be used to request certificates from a CA server,
|
||||||
update their certificates,
|
update their certificates,
|
||||||
request certificates to be revoked, and perform other types of CMP requests.
|
request certificates to be revoked, and perform other types of CMP requests.
|
||||||
|
|
@ -439,7 +440,7 @@ Request implicit confirmation of newly enrolled certificates.
|
||||||
Do not send certificate confirmation message for newly enrolled certificate
|
Do not send certificate confirmation message for newly enrolled certificate
|
||||||
without requesting implicit confirmation
|
without requesting implicit confirmation
|
||||||
to cope with broken servers not supporting implicit confirmation correctly.
|
to cope with broken servers not supporting implicit confirmation correctly.
|
||||||
B<WARNING:> This leads to behavior violating RFC 4210.
|
B<WARNING:> This leads to behavior violating RFC 9810.
|
||||||
|
|
||||||
=item B<-certout> I<filename>
|
=item B<-certout> I<filename>
|
||||||
|
|
||||||
|
|
@ -697,7 +698,7 @@ This applies to the following message types and contents:
|
||||||
|
|
||||||
B<WARNING:> This setting leads to unspecified behavior and it is meant
|
B<WARNING:> This setting leads to unspecified behavior and it is meant
|
||||||
exclusively to allow interoperability with server implementations violating
|
exclusively to allow interoperability with server implementations violating
|
||||||
RFC 4210, e.g.:
|
RFC 9810, e.g.:
|
||||||
|
|
||||||
=over 4
|
=over 4
|
||||||
|
|
||||||
|
|
@ -813,7 +814,7 @@ This takes precedence over the B<-cert> and B<-key> options.
|
||||||
The secret is used for creating MAC-based protection of outgoing messages
|
The secret is used for creating MAC-based protection of outgoing messages
|
||||||
and for validating incoming messages that have MAC-based protection.
|
and for validating incoming messages that have MAC-based protection.
|
||||||
The algorithm used by default is Password-Based Message Authentication Code (PBM)
|
The algorithm used by default is Password-Based Message Authentication Code (PBM)
|
||||||
as defined in RFC 4210 section 5.1.3.1.
|
as defined in RFC 9810 section 5.1.3.1.
|
||||||
|
|
||||||
For more information about the format of I<arg> see
|
For more information about the format of I<arg> see
|
||||||
L<openssl-passphrase-options(1)>.
|
L<openssl-passphrase-options(1)>.
|
||||||
|
|
@ -837,7 +838,7 @@ this "protection certificate", also called "signer certificate",
|
||||||
will be included first in the extraCerts field of outgoing messages
|
will be included first in the extraCerts field of outgoing messages
|
||||||
and the signature is done with the corresponding key.
|
and the signature is done with the corresponding key.
|
||||||
In Initialization Request (IR) messages this can be used for authenticating
|
In Initialization Request (IR) messages this can be used for authenticating
|
||||||
using an external entity certificate as defined in appendix E.7 of RFC 4210.
|
using an external entity certificate as defined in appendix D.7 of RFC 9810.
|
||||||
|
|
||||||
For Key Update Request (KUR) messages this is also used as
|
For Key Update Request (KUR) messages this is also used as
|
||||||
the certificate to be updated if the B<-oldcert> option is not given.
|
the certificate to be updated if the B<-oldcert> option is not given.
|
||||||
|
|
@ -880,7 +881,7 @@ L<openssl-passphrase-options(1)>.
|
||||||
|
|
||||||
=item B<-digest> I<name>
|
=item B<-digest> I<name>
|
||||||
|
|
||||||
Specifies name of supported digest to use in RFC 4210's MSG_SIG_ALG
|
Specifies name of supported digest to use in RFC 9810's MSG_SIG_ALG
|
||||||
and as the one-way function (OWF) in C<MSG_MAC_ALG>.
|
and as the one-way function (OWF) in C<MSG_MAC_ALG>.
|
||||||
If applicable, this is used for message protection and
|
If applicable, this is used for message protection and
|
||||||
proof-of-possession (POPO) signatures.
|
proof-of-possession (POPO) signatures.
|
||||||
|
|
@ -893,7 +894,7 @@ Specifies the name of the MAC algorithm in C<MSG_MAC_ALG>.
|
||||||
To get the names of supported MAC algorithms use C<openssl list -mac-algorithms>
|
To get the names of supported MAC algorithms use C<openssl list -mac-algorithms>
|
||||||
and possibly combine such a name with the name of a supported digest algorithm,
|
and possibly combine such a name with the name of a supported digest algorithm,
|
||||||
e.g., hmacWithSHA256.
|
e.g., hmacWithSHA256.
|
||||||
Defaults to C<hmac-sha1> as per RFC 4210.
|
Defaults to C<hmac-sha1>, for backward compatibility with RFC 4210.
|
||||||
|
|
||||||
=item B<-extracerts> I<filenames>|I<uris>
|
=item B<-extracerts> I<filenames>|I<uris>
|
||||||
|
|
||||||
|
|
@ -1283,7 +1284,7 @@ Send response messages without CMP-level protection.
|
||||||
|
|
||||||
In case of negative responses, server shall send unprotected error messages,
|
In case of negative responses, server shall send unprotected error messages,
|
||||||
certificate responses (IP/CP/KUP), and revocation responses (RP).
|
certificate responses (IP/CP/KUP), and revocation responses (RP).
|
||||||
WARNING: This setting leads to behavior violating RFC 4210.
|
WARNING: This setting leads to behavior violating RFC 9810.
|
||||||
|
|
||||||
=item B<-accept_unprotected>
|
=item B<-accept_unprotected>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,7 @@ OSSL_CMP_ATAV_free() deallocates I<atav>. It is defined as a macro.
|
||||||
|
|
||||||
=head1 NOTES
|
=head1 NOTES
|
||||||
|
|
||||||
CMP is defined in RFC 4210. CRMF is defined in RFC 4211.
|
CMP is defined in RFC 9810. CRMF is defined in RFC 4211.
|
||||||
|
|
||||||
=head1 RETURN VALUES
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -287,19 +287,19 @@ is provided as the newPkey or client's pkey component of the CMP context.
|
||||||
|
|
||||||
=item B<OSSL_CMP_OPT_DIGEST_ALGNID>
|
=item B<OSSL_CMP_OPT_DIGEST_ALGNID>
|
||||||
|
|
||||||
The NID of the digest algorithm to be used in RFC 4210's MSG_SIG_ALG
|
The NID of the digest algorithm to be used in RFC 9810's MSG_SIG_ALG
|
||||||
for signature-based message protection and Proof-of-Possession (POPO).
|
for signature-based message protection and Proof-of-Possession (POPO).
|
||||||
Default is SHA256.
|
Default is SHA256.
|
||||||
|
|
||||||
=item B<OSSL_CMP_OPT_OWF_ALGNID>
|
=item B<OSSL_CMP_OPT_OWF_ALGNID>
|
||||||
The NID of the digest algorithm to be used as one-way function (OWF)
|
The NID of the digest algorithm to be used as one-way function (OWF)
|
||||||
for MAC-based message protection with password-based MAC (PBM).
|
for MAC-based message protection with password-based MAC (PBM).
|
||||||
See RFC 4210 section 5.1.3.1 for details.
|
See RFC 9810 section 5.1.3.1 for details.
|
||||||
Default is SHA256.
|
Default is SHA256.
|
||||||
|
|
||||||
=item B<OSSL_CMP_OPT_MAC_ALGNID>
|
=item B<OSSL_CMP_OPT_MAC_ALGNID>
|
||||||
The NID of the MAC algorithm to be used for message protection with PBM.
|
The NID of the MAC algorithm to be used for message protection with PBM.
|
||||||
Default is HMAC-SHA1 as per RFC 4210.
|
Default is HMAC-SHA1, for backward compatibility with RFC 4210.
|
||||||
|
|
||||||
=item B<OSSL_CMP_OPT_REVOCATION_REASON>
|
=item B<OSSL_CMP_OPT_REVOCATION_REASON>
|
||||||
|
|
||||||
|
|
@ -319,7 +319,7 @@ Do not confirm enrolled certificates, to cope with broken servers
|
||||||
not supporting implicit confirmation correctly.
|
not supporting implicit confirmation correctly.
|
||||||
B<WARNING:> This setting leads to unspecified behavior and it is meant
|
B<WARNING:> This setting leads to unspecified behavior and it is meant
|
||||||
exclusively to allow interoperability with server implementations violating
|
exclusively to allow interoperability with server implementations violating
|
||||||
RFC 4210.
|
RFC 9810.
|
||||||
|
|
||||||
=item B<OSSL_CMP_OPT_UNPROTECTED_SEND>
|
=item B<OSSL_CMP_OPT_UNPROTECTED_SEND>
|
||||||
|
|
||||||
|
|
@ -333,7 +333,7 @@ error messages as well as certificate responses (IP/CP/KUP) and
|
||||||
revocation responses (RP) with rejection.
|
revocation responses (RP) with rejection.
|
||||||
B<WARNING:> This setting leads to unspecified behavior and it is meant
|
B<WARNING:> This setting leads to unspecified behavior and it is meant
|
||||||
exclusively to allow interoperability with server implementations violating
|
exclusively to allow interoperability with server implementations violating
|
||||||
RFC 4210.
|
RFC 9810.
|
||||||
|
|
||||||
=item B<OSSL_CMP_OPT_IGNORE_KEYUSAGE>
|
=item B<OSSL_CMP_OPT_IGNORE_KEYUSAGE>
|
||||||
|
|
||||||
|
|
@ -543,7 +543,7 @@ messages that have MAC-based protection (protectionAlg = C<MSG_MAC_ALG>).
|
||||||
|
|
||||||
OSSL_CMP_CTX_set1_referenceValue() sets the given referenceValue I<ref> with
|
OSSL_CMP_CTX_set1_referenceValue() sets the given referenceValue I<ref> with
|
||||||
length I<len> in the given I<ctx> or clears it if the I<ref> argument is NULL.
|
length I<len> in the given I<ctx> or clears it if the I<ref> argument is NULL.
|
||||||
According to RFC 4210 section 5.1.1, if no value for the sender field in
|
According to RFC 9810 section 5.1.1, if no value for the sender field in
|
||||||
CMP message headers can be determined (i.e., no CMP signer certificate
|
CMP message headers can be determined (i.e., no CMP signer certificate
|
||||||
and no subject DN is set via OSSL_CMP_CTX_set1_subjectName()
|
and no subject DN is set via OSSL_CMP_CTX_set1_subjectName()
|
||||||
then the sender field will contain the NULL-DN
|
then the sender field will contain the NULL-DN
|
||||||
|
|
@ -756,7 +756,7 @@ the I<ctx>. This will be used to validate the recipNonce in incoming messages.
|
||||||
|
|
||||||
=head1 NOTES
|
=head1 NOTES
|
||||||
|
|
||||||
CMP is defined in RFC 4210 (and CRMF in RFC 4211).
|
CMP is defined in RFC 9810 (and CRMF in RFC 4211).
|
||||||
|
|
||||||
=head1 RETURN VALUES
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ in the generalInfo field of the given PKIHeader.
|
||||||
|
|
||||||
=head1 NOTES
|
=head1 NOTES
|
||||||
|
|
||||||
CMP is defined in RFC 4210.
|
CMP is defined in RFC 9810.
|
||||||
|
|
||||||
=head1 RETURN VALUES
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -173,7 +173,7 @@ B<algId> or B<rsaKeyLen> and assigns to I<*keySpec> a copy of the keySpec field.
|
||||||
|
|
||||||
=head1 NOTES
|
=head1 NOTES
|
||||||
|
|
||||||
CMP is defined in RFC 4210.
|
CMP is defined in RFC 9810.
|
||||||
|
|
||||||
=head1 RETURN VALUES
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ OSSL_CMP_ITAV_get0_certProfile
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
ITAV is short for InfoTypeAndValue. This type is defined in RFC 4210
|
ITAV is short for InfoTypeAndValue. This type is defined in RFC 9810
|
||||||
section 5.3.19 and Appendix F. It is used at various places in CMP messages,
|
section 5.3.19 and Appendix F. It is used at various places in CMP messages,
|
||||||
e.g., in the generalInfo PKIHeader field, to hold a key-value pair.
|
e.g., in the generalInfo PKIHeader field, to hold a key-value pair.
|
||||||
|
|
||||||
|
|
@ -61,7 +61,7 @@ It is an error if the infoType of I<itav> is not B<certProfile>.
|
||||||
|
|
||||||
=head1 NOTES
|
=head1 NOTES
|
||||||
|
|
||||||
CMP is defined in RFC 4210 and RFC 9480 (and CRMF in RFC 4211).
|
CMP is defined in RFC 9810.
|
||||||
|
|
||||||
OIDs to use as types in B<OSSL_CMP_ITAV> can be found at
|
OIDs to use as types in B<OSSL_CMP_ITAV> can be found at
|
||||||
L<https://datatracker.ietf.org/doc/html/rfc9480#section-4.2.2>.
|
L<https://datatracker.ietf.org/doc/html/rfc9480#section-4.2.2>.
|
||||||
|
|
|
||||||
|
|
@ -114,7 +114,7 @@ to BIO I<bio>.
|
||||||
|
|
||||||
=head1 NOTES
|
=head1 NOTES
|
||||||
|
|
||||||
CMP is defined in RFC 4210.
|
CMP is defined in RFC 9810.
|
||||||
|
|
||||||
=head1 RETURN VALUES
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,8 +43,8 @@ such as L<OSSL_HTTP_proxy_connect(3)>.
|
||||||
|
|
||||||
=head1 NOTES
|
=head1 NOTES
|
||||||
|
|
||||||
CMP is defined in RFC 4210.
|
CMP is defined in RFC 9810.
|
||||||
HTTP transfer for CMP is defined in RFC 6712.
|
HTTP transfer for CMP is defined in RFC 9811.
|
||||||
|
|
||||||
=head1 RETURN VALUES
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -157,7 +157,7 @@ confirmation of newly enrolled certificates if requested.
|
||||||
|
|
||||||
=head1 NOTES
|
=head1 NOTES
|
||||||
|
|
||||||
CMP is defined in RFC 4210 (and CRMF in RFC 4211).
|
CMP is defined in RFC 9810 (and CRMF in RFC 4211).
|
||||||
|
|
||||||
So far the CMP server implementation is limited to one request per CMP message
|
So far the CMP server implementation is limited to one request per CMP message
|
||||||
(and consequently to at most one response component per CMP message).
|
(and consequently to at most one response component per CMP message).
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ in the given buffer, with the given maximal length.
|
||||||
|
|
||||||
=head1 NOTES
|
=head1 NOTES
|
||||||
|
|
||||||
CMP is defined in RFC 4210 (and CRMF in RFC 4211).
|
CMP is defined in RFC 9810.
|
||||||
|
|
||||||
=head1 RETURN VALUES
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -119,7 +119,7 @@ otherwise the issuer DN and serial number
|
||||||
of the certificate set by L<OSSL_CMP_CTX_set1_oldCert(3)>,
|
of the certificate set by L<OSSL_CMP_CTX_set1_oldCert(3)>,
|
||||||
otherwise the subject DN and public key
|
otherwise the subject DN and public key
|
||||||
of the certificate signing request set by L<OSSL_CMP_CTX_set1_p10CSR(3)>.
|
of the certificate signing request set by L<OSSL_CMP_CTX_set1_p10CSR(3)>.
|
||||||
RFC 4210 is vague in which PKIStatus should be returned by the server.
|
RFC 9810 is vague in which PKIStatus should be returned by the server.
|
||||||
We take "accepted" and "grantedWithMods" as clear success and handle
|
We take "accepted" and "grantedWithMods" as clear success and handle
|
||||||
"revocationWarning" and "revocationNotification" just as warnings because CAs
|
"revocationWarning" and "revocationNotification" just as warnings because CAs
|
||||||
typically return them as an indication that the certificate was already revoked.
|
typically return them as an indication that the certificate was already revoked.
|
||||||
|
|
@ -138,7 +138,7 @@ and returns the list of B<ITAV>s received in a genp response message.
|
||||||
This can be used, for instance,
|
This can be used, for instance,
|
||||||
with infoType C<signKeyPairTypes> to obtain the set of signature
|
with infoType C<signKeyPairTypes> to obtain the set of signature
|
||||||
algorithm identifiers that the CA will certify for subject public keys.
|
algorithm identifiers that the CA will certify for subject public keys.
|
||||||
See RFC 4210 section 5.3.19 and appendix E.5 for details.
|
See RFC 9810 section 5.3.19 and appendix D.5 for details.
|
||||||
Functions implementing more specific genm/genp exchanges are described next.
|
Functions implementing more specific genm/genp exchanges are described next.
|
||||||
|
|
||||||
OSSL_CMP_get1_caCerts() uses a genm/genp message exchange with infoType caCerts
|
OSSL_CMP_get1_caCerts() uses a genm/genp message exchange with infoType caCerts
|
||||||
|
|
@ -151,7 +151,7 @@ OSSL_CMP_get1_rootCaKeyUpdate() uses a genm request message
|
||||||
with infoType rootCaCert to obtain from the CMP server referenced by I<ctx>
|
with infoType rootCaCert to obtain from the CMP server referenced by I<ctx>
|
||||||
in a genp response message with infoType rootCaKeyUpdate any update of the
|
in a genp response message with infoType rootCaKeyUpdate any update of the
|
||||||
given root CA certificate I<oldWithOld> and verifies it as far as possible.
|
given root CA certificate I<oldWithOld> and verifies it as far as possible.
|
||||||
See RFC 4210 section 4.4 for details.
|
See RFC 9810 section 4.4 for details.
|
||||||
On success it assigns to I<*newWithNew> the root certificate received.
|
On success it assigns to I<*newWithNew> the root certificate received.
|
||||||
When the I<newWithOld> and I<oldWithNew> output parameters are not NULL,
|
When the I<newWithOld> and I<oldWithNew> output parameters are not NULL,
|
||||||
it assigns to them the corresponding transition certificates.
|
it assigns to them the corresponding transition certificates.
|
||||||
|
|
@ -183,7 +183,7 @@ Both must be freed by the caller.
|
||||||
|
|
||||||
=head1 NOTES
|
=head1 NOTES
|
||||||
|
|
||||||
CMP is defined in RFC 4210 (and CRMF in RFC 4211).
|
CMP is defined in RFC 9810 (and CRMF in RFC 4211).
|
||||||
|
|
||||||
The CMP client implementation is limited to one request per CMP message
|
The CMP client implementation is limited to one request per CMP message
|
||||||
(and consequently to at most one response component per CMP message).
|
(and consequently to at most one response component per CMP message).
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ verification callback) and non-trusted intermediate certs from the I<ctx>.
|
||||||
|
|
||||||
=head1 NOTES
|
=head1 NOTES
|
||||||
|
|
||||||
CMP is defined in RFC 4210 (and CRMF in RFC 4211).
|
CMP is defined in RFC 9810.
|
||||||
|
|
||||||
=head1 RETURN VALUES
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@ of the given CertId I<cid>, which must be of ASN.1 type GEN_DIRNAME.
|
||||||
OSSL_CRMF_ENCRYPTEDKEY_get1_encCert() decrypts the certificate in the given
|
OSSL_CRMF_ENCRYPTEDKEY_get1_encCert() decrypts the certificate in the given
|
||||||
encryptedKey I<ecert>, using the private key I<pkey>, library context
|
encryptedKey I<ecert>, using the private key I<pkey>, library context
|
||||||
I<libctx> and property query string I<propq> (see L<OSSL_LIB_CTX(3)>).
|
I<libctx> and property query string I<propq> (see L<OSSL_LIB_CTX(3)>).
|
||||||
This is needed for the indirect POPO method as in RFC 4210 section 5.2.8.2.
|
This is needed for the indirect POPO method as in RFC 9810 section 5.2.8.3.2.
|
||||||
The function returns the decrypted certificate as a copy, leaving its ownership
|
The function returns the decrypted certificate as a copy, leaving its ownership
|
||||||
with the caller, who is responsible for freeing it.
|
with the caller, who is responsible for freeing it.
|
||||||
|
|
||||||
|
|
@ -119,7 +119,7 @@ I<libctx> and property query string I<propq> (see L<OSSL_LIB_CTX(3)>).
|
||||||
OSSL_CRMF_ENCRYPTEDVALUE_get1_encCert() decrypts the certificate in the given
|
OSSL_CRMF_ENCRYPTEDVALUE_get1_encCert() decrypts the certificate in the given
|
||||||
encryptedValue I<ecert>, using the private key I<pkey>, library context
|
encryptedValue I<ecert>, using the private key I<pkey>, library context
|
||||||
I<libctx> and property query string I<propq> (see L<OSSL_LIB_CTX(3)>).
|
I<libctx> and property query string I<propq> (see L<OSSL_LIB_CTX(3)>).
|
||||||
This is needed for the indirect POPO method as in RFC 4210 section 5.2.8.2.
|
This is needed for the indirect POPO method as in RFC 9810 section 5.2.8.3.2.
|
||||||
The function returns the decrypted certificate as a copy, leaving its ownership
|
The function returns the decrypted certificate as a copy, leaving its ownership
|
||||||
with the caller, who is responsible for freeing it.
|
with the caller, who is responsible for freeing it.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,14 +43,15 @@ for the random number generation (DRBG) and may be NULL for the default.
|
||||||
|
|
||||||
The algorithms for the OWF (one-way function) and for the MAC (message
|
The algorithms for the OWF (one-way function) and for the MAC (message
|
||||||
authentication code) may be any with a NID defined in F<< <openssl/objects.h> >>.
|
authentication code) may be any with a NID defined in F<< <openssl/objects.h> >>.
|
||||||
As specified by RFC 4210, these should include NID_hmac_sha1.
|
For backward compatibility with RFC 4210, these should include NID_hmac_sha1.
|
||||||
|
|
||||||
RFC 4210 recommends that the salt SHOULD be at least 8 bytes (64 bits) long,
|
RFC 4210 recommended that the salt SHOULD be at least 8 bytes (64 bits) long,
|
||||||
where 16 bytes is common.
|
where 16 bytes is common.
|
||||||
|
|
||||||
The iteration count must be at least 100, as stipulated by RFC 4211, and is
|
The iteration count must be at least 100, as stipulated by RFC 4211, and is
|
||||||
limited to at most 100000 to avoid DoS through manipulated or otherwise
|
limited to at most 100000 to avoid DoS through manipulated or otherwise
|
||||||
malformed input.
|
malformed input.
|
||||||
|
See RFC 9045 for currently suggested values.
|
||||||
|
|
||||||
=head1 RETURN VALUES
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -191,9 +191,9 @@ For more information, see L<OpenSSL_version(3)>.
|
||||||
|
|
||||||
=head3 Other major new features
|
=head3 Other major new features
|
||||||
|
|
||||||
=head4 Certificate Management Protocol (CMP, RFC 4210)
|
=head4 Certificate Management Protocol (CMP, RFC 9810)
|
||||||
|
|
||||||
This also covers CRMF (RFC 4211) and HTTP transfer (RFC 6712)
|
This also covers CRMF (RFC 4211) and HTTP transfer (RFC 9811)
|
||||||
See L<openssl-cmp(1)> and L<OSSL_CMP_exec_certreq(3)> as starting points.
|
See L<openssl-cmp(1)> and L<OSSL_CMP_exec_certreq(3)> as starting points.
|
||||||
|
|
||||||
=head4 HTTP(S) client
|
=head4 HTTP(S) client
|
||||||
|
|
|
||||||
|
|
@ -154,6 +154,10 @@ provider):
|
||||||
core_new_error OSSL_FUNC_CORE_NEW_ERROR
|
core_new_error OSSL_FUNC_CORE_NEW_ERROR
|
||||||
core_set_error_debug OSSL_FUNC_CORE_SET_ERROR_DEBUG
|
core_set_error_debug OSSL_FUNC_CORE_SET_ERROR_DEBUG
|
||||||
core_vset_error OSSL_FUNC_CORE_VSET_ERROR
|
core_vset_error OSSL_FUNC_CORE_VSET_ERROR
|
||||||
|
core_set_error_mark OSSL_FUNC_CORE_SET_ERROR_MARK
|
||||||
|
core_clear_last_error_mark OSSL_FUNC_CORE_CLEAR_LAST_ERROR_MARK
|
||||||
|
core_pop_error_to_mark OSSL_FUNC_CORE_POP_ERROR_TO_MARK
|
||||||
|
core_count_to_mark OSSL_FUNC_CORE_COUNT_TO_MARK
|
||||||
core_obj_add_sigid OSSL_FUNC_CORE_OBJ_ADD_SIGID
|
core_obj_add_sigid OSSL_FUNC_CORE_OBJ_ADD_SIGID
|
||||||
core_obj_create OSSL_FUNC_CORE_OBJ_CREATE
|
core_obj_create OSSL_FUNC_CORE_OBJ_CREATE
|
||||||
CRYPTO_malloc OSSL_FUNC_CRYPTO_MALLOC
|
CRYPTO_malloc OSSL_FUNC_CRYPTO_MALLOC
|
||||||
|
|
@ -270,6 +274,33 @@ error occurred or was reported.
|
||||||
|
|
||||||
This corresponds to the OpenSSL function L<ERR_vset_error(3)>.
|
This corresponds to the OpenSSL function L<ERR_vset_error(3)>.
|
||||||
|
|
||||||
|
=item core_set_error_mark()
|
||||||
|
|
||||||
|
sets a mark on the current topmost error record if there is one.
|
||||||
|
|
||||||
|
This corresponds to the OpenSSL function L<ERR_set_mark(3)>.
|
||||||
|
|
||||||
|
=item core_clear_last_error_mark()
|
||||||
|
|
||||||
|
removes the last mark added if there is one.
|
||||||
|
|
||||||
|
This corresponds to the OpenSSL function L<ERR_clear_last_mark(3)>.
|
||||||
|
|
||||||
|
=item core_pop_error_to_mark()
|
||||||
|
|
||||||
|
pops the top of the error stack until a mark is found. The mark is then removed.
|
||||||
|
If there is no mark, the whole stack is removed.
|
||||||
|
|
||||||
|
This corresponds to the OpenSSL function L<ERR_pop_to_mark(3)>.
|
||||||
|
|
||||||
|
=item core_count_to_mark()
|
||||||
|
|
||||||
|
returns the number of entries on the error stack above the most recently
|
||||||
|
marked entry, not including that entry. If there is no mark in the error stack,
|
||||||
|
the number of entries in the error stack is returned.
|
||||||
|
|
||||||
|
This corresponds to the OpenSSL function L<ERR_count_to_mark(3)>.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
The core_obj_create() function registers a new OID and associated short name
|
The core_obj_create() function registers a new OID and associated short name
|
||||||
|
|
|
||||||
|
|
@ -590,10 +590,7 @@ int FuzzerTestOneInput(const uint8_t *buf, size_t len)
|
||||||
SSL *server;
|
SSL *server;
|
||||||
BIO *in;
|
BIO *in;
|
||||||
BIO *out;
|
BIO *out;
|
||||||
#if !defined(OPENSSL_NO_EC) \
|
|
||||||
|| (!defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0))
|
|
||||||
BIO *bio_buf;
|
BIO *bio_buf;
|
||||||
#endif
|
|
||||||
SSL_CTX *ctx;
|
SSL_CTX *ctx;
|
||||||
int ret;
|
int ret;
|
||||||
#ifndef OPENSSL_NO_DEPRECATED_3_0
|
#ifndef OPENSSL_NO_DEPRECATED_3_0
|
||||||
|
|
|
||||||
|
|
@ -253,6 +253,10 @@ OSSL_CORE_MAKE_FUNC(int, provider_up_ref,
|
||||||
OSSL_CORE_MAKE_FUNC(int, provider_free,
|
OSSL_CORE_MAKE_FUNC(int, provider_free,
|
||||||
(const OSSL_CORE_HANDLE *prov, int deactivate))
|
(const OSSL_CORE_HANDLE *prov, int deactivate))
|
||||||
|
|
||||||
|
/* Additional error functions provided by the core */
|
||||||
|
# define OSSL_FUNC_CORE_COUNT_TO_MARK 120
|
||||||
|
OSSL_CORE_MAKE_FUNC(int, core_count_to_mark, (const OSSL_CORE_HANDLE *prov))
|
||||||
|
|
||||||
/* Functions provided by the provider to the Core, reserved numbers 1024-1535 */
|
/* Functions provided by the provider to the Core, reserved numbers 1024-1535 */
|
||||||
# define OSSL_FUNC_PROVIDER_TEARDOWN 1024
|
# define OSSL_FUNC_PROVIDER_TEARDOWN 1024
|
||||||
OSSL_CORE_MAKE_FUNC(void, provider_teardown, (void *provctx))
|
OSSL_CORE_MAKE_FUNC(void, provider_teardown, (void *provctx))
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,7 @@ static OSSL_FUNC_core_vset_error_fn *c_vset_error;
|
||||||
static OSSL_FUNC_core_set_error_mark_fn *c_set_error_mark;
|
static OSSL_FUNC_core_set_error_mark_fn *c_set_error_mark;
|
||||||
static OSSL_FUNC_core_clear_last_error_mark_fn *c_clear_last_error_mark;
|
static OSSL_FUNC_core_clear_last_error_mark_fn *c_clear_last_error_mark;
|
||||||
static OSSL_FUNC_core_pop_error_to_mark_fn *c_pop_error_to_mark;
|
static OSSL_FUNC_core_pop_error_to_mark_fn *c_pop_error_to_mark;
|
||||||
|
static OSSL_FUNC_core_count_to_mark_fn *c_count_to_mark;
|
||||||
static OSSL_FUNC_CRYPTO_malloc_fn *c_CRYPTO_malloc;
|
static OSSL_FUNC_CRYPTO_malloc_fn *c_CRYPTO_malloc;
|
||||||
static OSSL_FUNC_CRYPTO_zalloc_fn *c_CRYPTO_zalloc;
|
static OSSL_FUNC_CRYPTO_zalloc_fn *c_CRYPTO_zalloc;
|
||||||
static OSSL_FUNC_CRYPTO_free_fn *c_CRYPTO_free;
|
static OSSL_FUNC_CRYPTO_free_fn *c_CRYPTO_free;
|
||||||
|
|
@ -834,6 +835,9 @@ int OSSL_provider_init_int(const OSSL_CORE_HANDLE *handle,
|
||||||
case OSSL_FUNC_CORE_POP_ERROR_TO_MARK:
|
case OSSL_FUNC_CORE_POP_ERROR_TO_MARK:
|
||||||
set_func(c_pop_error_to_mark, OSSL_FUNC_core_pop_error_to_mark(in));
|
set_func(c_pop_error_to_mark, OSSL_FUNC_core_pop_error_to_mark(in));
|
||||||
break;
|
break;
|
||||||
|
case OSSL_FUNC_CORE_COUNT_TO_MARK:
|
||||||
|
set_func(c_count_to_mark, OSSL_FUNC_core_count_to_mark(in));
|
||||||
|
break;
|
||||||
case OSSL_FUNC_CRYPTO_MALLOC:
|
case OSSL_FUNC_CRYPTO_MALLOC:
|
||||||
set_func(c_CRYPTO_malloc, OSSL_FUNC_CRYPTO_malloc(in));
|
set_func(c_CRYPTO_malloc, OSSL_FUNC_CRYPTO_malloc(in));
|
||||||
break;
|
break;
|
||||||
|
|
@ -1072,6 +1076,11 @@ int ERR_pop_to_mark(void)
|
||||||
return c_pop_error_to_mark(NULL);
|
return c_pop_error_to_mark(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ERR_count_to_mark(void)
|
||||||
|
{
|
||||||
|
return c_count_to_mark != NULL ? c_count_to_mark(NULL) : 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This must take a library context, since it's called from the depths
|
* This must take a library context, since it's called from the depths
|
||||||
* of crypto/initthread.c code, where it's (correctly) assumed that the
|
* of crypto/initthread.c code, where it's (correctly) assumed that the
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ static OSSL_FUNC_core_vset_error_fn *c_vset_error;
|
||||||
static OSSL_FUNC_core_set_error_mark_fn *c_set_error_mark;
|
static OSSL_FUNC_core_set_error_mark_fn *c_set_error_mark;
|
||||||
static OSSL_FUNC_core_clear_last_error_mark_fn *c_clear_last_error_mark;
|
static OSSL_FUNC_core_clear_last_error_mark_fn *c_clear_last_error_mark;
|
||||||
static OSSL_FUNC_core_pop_error_to_mark_fn *c_pop_error_to_mark;
|
static OSSL_FUNC_core_pop_error_to_mark_fn *c_pop_error_to_mark;
|
||||||
|
static OSSL_FUNC_core_count_to_mark_fn *c_count_to_mark;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Parameters we provide to the core */
|
/* Parameters we provide to the core */
|
||||||
|
|
@ -234,6 +235,9 @@ int OSSL_provider_init(const OSSL_CORE_HANDLE *handle,
|
||||||
case OSSL_FUNC_CORE_POP_ERROR_TO_MARK:
|
case OSSL_FUNC_CORE_POP_ERROR_TO_MARK:
|
||||||
set_func(c_pop_error_to_mark, OSSL_FUNC_core_pop_error_to_mark(tmp));
|
set_func(c_pop_error_to_mark, OSSL_FUNC_core_pop_error_to_mark(tmp));
|
||||||
break;
|
break;
|
||||||
|
case OSSL_FUNC_CORE_COUNT_TO_MARK:
|
||||||
|
set_func(c_count_to_mark, OSSL_FUNC_core_count_to_mark(in));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -301,4 +305,9 @@ int ERR_pop_to_mark(void)
|
||||||
{
|
{
|
||||||
return c_pop_error_to_mark(NULL);
|
return c_pop_error_to_mark(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ERR_count_to_mark(void)
|
||||||
|
{
|
||||||
|
return c_count_to_mark != NULL ? c_count_to_mark(NULL) : 0;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -23,9 +23,19 @@ print <<"_____";
|
||||||
#ifndef OPENSSL_NO_STDIO
|
#ifndef OPENSSL_NO_STDIO
|
||||||
# include <stdio.h>
|
# include <stdio.h>
|
||||||
#endif
|
#endif
|
||||||
|
_____
|
||||||
|
|
||||||
|
if (${name_uc} eq "RSA") {
|
||||||
|
print("#include <openssl/rsa.h>");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
print <<"_____";
|
||||||
#ifndef OPENSSL_NO_${name_uc}
|
#ifndef OPENSSL_NO_${name_uc}
|
||||||
# include <openssl/$name.h>
|
# include <openssl/$name.h>
|
||||||
#endif
|
#endif
|
||||||
|
_____
|
||||||
|
}
|
||||||
|
print <<"_____";
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,6 @@ test -d "$QUICHE_TARGET_PATH" || exit 1
|
||||||
|
|
||||||
"$QUICHE_TARGET_PATH/debug/quiche-server" --cert "$SRCTOP/test/certs/servercert.pem" \
|
"$QUICHE_TARGET_PATH/debug/quiche-server" --cert "$SRCTOP/test/certs/servercert.pem" \
|
||||||
--key "$SRCTOP/test/certs/serverkey.pem" --disable-gso \
|
--key "$SRCTOP/test/certs/serverkey.pem" --disable-gso \
|
||||||
--http-version HTTP/0.9 --root "$SRCTOP" --no-grease --disable-hystart &
|
--http-version HTTP/0.9 --root "$SRCTOP" --no-grease --disable-hystart > quiche_server_log 2>&1 &
|
||||||
|
|
||||||
echo $! >server.pid
|
echo $! >server.pid
|
||||||
|
|
|
||||||
|
|
@ -1984,7 +1984,7 @@ static int test_tlsext_status_type(void)
|
||||||
if (!create_ssl_ctx_pair(libctx, TLS_server_method(), TLS_client_method(),
|
if (!create_ssl_ctx_pair(libctx, TLS_server_method(), TLS_client_method(),
|
||||||
TLS1_VERSION, 0,
|
TLS1_VERSION, 0,
|
||||||
&sctx, &cctx, leaf, skey))
|
&sctx, &cctx, leaf, skey))
|
||||||
return 0;
|
goto end;
|
||||||
if (SSL_CTX_use_certificate_chain_file(sctx, leaf_chain) <= 0)
|
if (SSL_CTX_use_certificate_chain_file(sctx, leaf_chain) <= 0)
|
||||||
goto end;
|
goto end;
|
||||||
if (SSL_CTX_get_tlsext_status_type(cctx) != -1)
|
if (SSL_CTX_get_tlsext_status_type(cctx) != -1)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue