提交 4e71d952 编写于 作者: D Dr. Stephen Henson

add -cert_chain option to s_client

上级 fefc111a
...@@ -571,11 +571,12 @@ int MAIN(int argc, char **argv) ...@@ -571,11 +571,12 @@ int MAIN(int argc, char **argv)
short port=PORT; short port=PORT;
int full_log=1; int full_log=1;
char *host=SSL_HOST_NAME; char *host=SSL_HOST_NAME;
char *cert_file=NULL,*key_file=NULL; char *cert_file=NULL,*key_file=NULL,*chain_file=NULL;
int cert_format = FORMAT_PEM, key_format = FORMAT_PEM; int cert_format = FORMAT_PEM, key_format = FORMAT_PEM;
char *passarg = NULL, *pass = NULL; char *passarg = NULL, *pass = NULL;
X509 *cert = NULL; X509 *cert = NULL;
EVP_PKEY *key = NULL; EVP_PKEY *key = NULL;
STACK_OF(X509) *chain = NULL;
char *CApath=NULL,*CAfile=NULL; char *CApath=NULL,*CAfile=NULL;
char *chCApath=NULL,*chCAfile=NULL; char *chCApath=NULL,*chCAfile=NULL;
char *vfyCApath=NULL,*vfyCAfile=NULL; char *vfyCApath=NULL,*vfyCAfile=NULL;
...@@ -900,6 +901,11 @@ int MAIN(int argc, char **argv) ...@@ -900,6 +901,11 @@ int MAIN(int argc, char **argv)
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
passarg = *(++argv); passarg = *(++argv);
} }
else if (strcmp(*argv,"-cert_chain") == 0)
{
if (--argc < 1) goto bad;
chain_file= *(++argv);
}
else if (strcmp(*argv,"-key") == 0) else if (strcmp(*argv,"-key") == 0)
{ {
if (--argc < 1) goto bad; if (--argc < 1) goto bad;
...@@ -1124,6 +1130,14 @@ bad: ...@@ -1124,6 +1130,14 @@ bad:
} }
} }
if (chain_file)
{
chain = load_certs(bio_err, chain_file,FORMAT_PEM,
NULL, e, "client certificate chain");
if (!chain)
goto end;
}
if (crl_file) if (crl_file)
{ {
X509_CRL *crl; X509_CRL *crl;
...@@ -1260,7 +1274,7 @@ bad: ...@@ -1260,7 +1274,7 @@ bad:
ssl_ctx_add_crls(ctx, crls, crl_download); ssl_ctx_add_crls(ctx, crls, crl_download);
if (!set_cert_key_stuff(ctx,cert,key, NULL, build_chain)) if (!set_cert_key_stuff(ctx,cert,key,chain,build_chain))
goto end; goto end;
#ifndef OPENSSL_NO_TLSEXT #ifndef OPENSSL_NO_TLSEXT
...@@ -2007,6 +2021,8 @@ end: ...@@ -2007,6 +2021,8 @@ end:
sk_X509_CRL_pop_free(crls, X509_CRL_free); sk_X509_CRL_pop_free(crls, X509_CRL_free);
if (key) if (key)
EVP_PKEY_free(key); EVP_PKEY_free(key);
if (chain)
sk_X509_pop_free(chain, X509_free);
if (pass) if (pass)
OPENSSL_free(pass); OPENSSL_free(pass);
if (vpm) if (vpm)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册