X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=apps%2Fx509.c;h=1b612d17d41d01ebbfd921654b12dac664225563;hp=694d2544ebb2c5ab5fc60262d67cf3aae4daf4fc;hb=5a49001bde4e0cf8e34da55a9cfe9b5255275e10;hpb=7c8ac5050473ec938f2c2e3e5c9063d680be36a1 diff --git a/apps/x509.c b/apps/x509.c index 694d2544eb..1b612d17d4 100644 --- a/apps/x509.c +++ b/apps/x509.c @@ -166,6 +166,9 @@ static int x509_certify (X509_STORE *ctx,char *CAfile,const EVP_MD *digest, CONF *conf, char *section, ASN1_INTEGER *sno); static int purpose_print(BIO *bio, X509 *cert, X509_PURPOSE *pt); static int reqfile=0; +#ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL +static int force_version=2; +#endif int MAIN(int, char **); @@ -179,7 +182,7 @@ int MAIN(int argc, char **argv) STACK_OF(OPENSSL_STRING) *sigopts = NULL; EVP_PKEY *Upkey=NULL,*CApkey=NULL, *fkey = NULL; ASN1_INTEGER *sno = NULL; - int i,num,badops=0; + int i,num,badops=0, badsig=0; BIO *out=NULL; BIO *STDout=NULL; STACK_OF(ASN1_OBJECT) *trust = NULL, *reject = NULL; @@ -288,6 +291,13 @@ int MAIN(int argc, char **argv) if (!sigopts || !sk_OPENSSL_STRING_push(sigopts, *(++argv))) goto bad; } +#ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL + else if (strcmp(*argv,"-force_version") == 0) + { + if (--argc < 1) goto bad; + force_version=atoi(*(++argv)) - 1; + } +#endif else if (strcmp(*argv,"-days") == 0) { if (--argc < 1) goto bad; @@ -499,6 +509,8 @@ int MAIN(int argc, char **argv) #endif else if (strcmp(*argv,"-ocspid") == 0) ocspid= ++num; + else if (strcmp(*argv,"-badsig") == 0) + badsig = 1; else if ((md_alg=EVP_get_digestbyname(*argv + 1))) { /* ok */ @@ -1089,6 +1101,9 @@ bad: goto end; } + if (badsig) + x->signature->data[x->signature->length - 1] ^= 0x1; + if (outformat == FORMAT_ASN1) i=i2d_X509_bio(out,x); else if (outformat == FORMAT_PEM) @@ -1242,7 +1257,11 @@ static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest, if (conf) { X509V3_CTX ctx2; +#ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL + X509_set_version(x, force_version); +#else X509_set_version(x,2); /* version 3 certificate */ +#endif X509V3_set_ctx(&ctx2, xca, x, NULL, NULL, 0); X509V3_set_nconf(&ctx2, conf); if (!X509V3_EXT_add_nconf(conf, &ctx2, section, x)) goto end; @@ -1320,7 +1339,11 @@ static int sign(X509 *x, EVP_PKEY *pkey, int days, int clrext, const EVP_MD *dig if (conf) { X509V3_CTX ctx; +#ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL + X509_set_version(x, force_version); +#else X509_set_version(x,2); /* version 3 certificate */ +#endif X509V3_set_ctx(&ctx, x, x, NULL, NULL, 0); X509V3_set_nconf(&ctx, conf); if (!X509V3_EXT_add_nconf(conf, &ctx, section, x)) goto err;