@@ -1054,30 +1054,41 @@ void SecureContext::LoadPKCS12(const FunctionCallbackInfo<Value>& args) {
1054
1054
STACK_OF (X509)* extra_certs_ptr = nullptr ;
1055
1055
if (d2i_PKCS12_bio (in.get (), &p12_ptr) &&
1056
1056
(p12.reset (p12_ptr), true ) && // Move ownership to the smart pointer.
1057
- PKCS12_parse (p12.get (), pass.data (),
1058
- &pkey_ptr,
1059
- &cert_ptr,
1060
- &extra_certs_ptr) &&
1061
- (pkey.reset (pkey_ptr), cert.reset (cert_ptr),
1062
- extra_certs.reset (extra_certs_ptr), true ) && // Move ownership.
1063
- SSL_CTX_use_certificate_chain (sc->ctx_ .get (),
1064
- std::move (cert),
1065
- extra_certs.get (),
1066
- &sc->cert_ ,
1067
- &sc->issuer_ ) &&
1068
- SSL_CTX_use_PrivateKey (sc->ctx_ .get (), pkey.get ())) {
1069
- // Add CA certs too
1070
- for (int i = 0 ; i < sk_X509_num (extra_certs.get ()); i++) {
1071
- X509* ca = sk_X509_value (extra_certs.get (), i);
1072
-
1073
- if (cert_store == GetOrCreateRootCertStore ()) {
1074
- cert_store = NewRootCertStore ();
1075
- SSL_CTX_set_cert_store (sc->ctx_ .get (), cert_store);
1057
+ PKCS12_parse (
1058
+ p12.get (), pass.data (), &pkey_ptr, &cert_ptr, &extra_certs_ptr) &&
1059
+ (pkey.reset (pkey_ptr),
1060
+ cert.reset (cert_ptr), // Move ownership.
1061
+ extra_certs.reset (extra_certs_ptr),
1062
+ true )) {
1063
+ if (pkey.get () == nullptr ) {
1064
+ return THROW_ERR_CRYPTO_OPERATION_FAILED (
1065
+ env, " Unable to load private key from PFX data" );
1066
+ }
1067
+
1068
+ if (cert.get () == nullptr ) {
1069
+ return THROW_ERR_CRYPTO_OPERATION_FAILED (
1070
+ env, " Unable to load certificate from PFX data" );
1071
+ }
1072
+
1073
+ if (SSL_CTX_use_certificate_chain (sc->ctx_ .get (),
1074
+ std::move (cert),
1075
+ extra_certs.get (),
1076
+ &sc->cert_ ,
1077
+ &sc->issuer_ ) &&
1078
+ SSL_CTX_use_PrivateKey (sc->ctx_ .get (), pkey.get ())) {
1079
+ // Add CA certs too
1080
+ for (int i = 0 ; i < sk_X509_num (extra_certs.get ()); i++) {
1081
+ X509* ca = sk_X509_value (extra_certs.get (), i);
1082
+
1083
+ if (cert_store == GetOrCreateRootCertStore ()) {
1084
+ cert_store = NewRootCertStore ();
1085
+ SSL_CTX_set_cert_store (sc->ctx_ .get (), cert_store);
1086
+ }
1087
+ X509_STORE_add_cert (cert_store, ca);
1088
+ SSL_CTX_add_client_CA (sc->ctx_ .get (), ca);
1076
1089
}
1077
- X509_STORE_add_cert (cert_store, ca);
1078
- SSL_CTX_add_client_CA (sc->ctx_ .get (), ca);
1090
+ ret = true ;
1079
1091
}
1080
- ret = true ;
1081
1092
}
1082
1093
1083
1094
if (!ret) {
0 commit comments