署名の作成と署名の検証機能を含む ECDSA_METHOD を実装する OpenSSL エンジンを構築しています。ECDHE 秘密鍵は署名の作成にのみ使用されるため、エンジンからキーをエクスポートして他の場所に提示する必要はありません。
ただし、SSL_set_private_key 関数を介して SSL_Context に秘密鍵を提供しない場合、SSL ハンドシェイクは次のエラーで失敗します。
error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
また、SSL_set_private_key 関数にモック キー (証明書の公開キーに関連しないもの) を提供しようとしましたが、この関数は、秘密/公開キーが一致するかどうかを検証し、一致しない場合は証明書が正しくないというエラーをスローします。 t。
openssl では、場合によってはこの検証をバイパスできるようです。たとえば、これは ssl/ssl_rsa.c で見つけたものです。
#ifndef OPENSSL_NO_RSA
/*
* Don't check the public/private key, this is mostly for smart
* cards.
*/
if ((pkey->type == EVP_PKEY_RSA) &&
(RSA_flags(pkey->pkey.rsa) & RSA_METHOD_FLAG_NO_CHECK)) ;
else
#endif
if (!X509_check_private_key(c->pkeys[i].x509, pkey)) {
X509_free(c->pkeys[i].x509);
c->pkeys[i].x509 = NULL;
return 0;
}
ECキーに似たものが必要だと思いますが、どこにも見つかりませんでした。他のソリューションも高く評価されます。