1. ホーム
  2. c

[解決済み] PEM_read_RSAPublicKeyでopensslが生成したRSA pub keyを読み込めないのはなぜですか?

2022-02-18 22:45:39

質問

OpenSSLで生成したRSA公開鍵をこのように読み取ろうとしています。

Private Key:
    openssl genrsa -out mykey.pem 1024

Public Key afterwards:
    openssl rsa -in mykey.pem -pubout > somewhere.pub

そして、読もうとする。

FILE *keyfile = fopen("somewhere.pub", "r");
RSA *rsa_pub = PEM_read_RSAPublicKey(keyfile, NULL, NULL, NULL);
//rsa_pub == NULL!

秘密鍵を読み込むと、次のように動作します。

FILE *keyfile = fopen("mykey.pem", "r");
RSA *rsa_pri = PEM_read_RSAPrivateKey(keyfile, NULL, NULL, NULL);
//all good

何かアイデアはありますか?

RSA公開鍵のX509鍵をopensslが生成すると読んだことがあります。しかし、私はX509の公開鍵さえも読み込むことができませんでした。

ありがとうございます。

解決方法は?

次のことを試してみてください。 PEM_read_RSA_PUBKEY() の代わりに PEM_read_RSAPublicKey() .

これは、フォーマットに関するものです。

opensslが生成するデフォルトの公開鍵ファイル形式は、PEM形式です。

PEM_read_RSA_PUBKEY() はPEM形式を読み取ります。 PEM_read_RSAPublicKey() はPKCS#1形式を読み取ります。

だから、もしあなたが PEM_read_RSAPublicKey() を指定すると、PKCS#1 形式で公開鍵ファイルを生成することができます。 -outform DER オプションで指定します。