Skip to content

Commit

Permalink
crypto: return a clearer error when loading an unsupported pkcs12
Browse files Browse the repository at this point in the history
  • Loading branch information
pimterry committed Aug 21, 2024
1 parent 821ffab commit 48b65f7
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/crypto/crypto_context.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1148,6 +1148,14 @@ void SecureContext::LoadPKCS12(const FunctionCallbackInfo<Value>& args) {
if (!ret) {
// TODO(@jasnell): Should this use ThrowCryptoError?
unsigned long err = ERR_get_error(); // NOLINT(runtime/int)

if (ERR_GET_REASON(err) == ERR_R_UNSUPPORTED) {
// OpenSSL's "unsupported" error without any context is very
// common and not very helpful, so we override it:
return THROW_ERR_CRYPTO_UNSUPPORTED_OPERATION(
env, "Unsupported PKCS12 PFX data");
}

const char* str = ERR_reason_error_string(err);
str = str != nullptr ? str : "Unknown error";

Expand Down
Binary file added test/fixtures/keys/legacy.pfx
Binary file not shown.
24 changes: 24 additions & 0 deletions test/parallel/test-tls-legacy-pfx.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
'use strict';
const common = require('../common');
if (!common.hasCrypto)
common.skip('missing crypto');
const fixtures = require('../common/fixtures');

const {
assert, connect, keys
} = require(fixtures.path('tls-connect'));

const legacyPfx = fixtures.readKey('legacy.pfx');

connect({
client: {
pfx: legacyPfx,
passphrase: 'legacy',
rejectUnauthorized: false
},
server: keys.agent1
}, common.mustCall((e, pair, cleanup) => {
assert.strictEqual(e.code, 'ERR_CRYPTO_UNSUPPORTED_OPERATION');
assert.strictEqual(e.message, 'Unsupported PKCS12 PFX data');
cleanup();
}));

0 comments on commit 48b65f7

Please sign in to comment.