genpkey で秘密鍵を作る

後述するプログラムが上手く動かないからコマンドラインで作る.

資料

NAME

genpkey - generate a private key

SYNOPSIS

openssl genpkey [-out filename] [-outform PEM|DER] [-pass arg] [-cipher] [-engine id] [-paramfile file] [-algorithm alg] [-pkeyopt opt:value] [-genparam] [-text]

DESCRIPTION

The genpkey command generates a private key.

/docs/manmaster/man1/genpkey.html

使用例

openssl genpkey -out pkey.pem -outform pem -algorithm rsa -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:65537

プログラム例

PEM_write_RSAPrivateKey() 実行行で「プログラム '[2232] genpKey.exe: ネイティブ' はコード 1 (0x1) で終了しました。」という出力を最後に終わる.

#ifdef _DEBUG
#pragma comment(lib, "libeay32MDd.lib")
#pragma comment(lib, "ssleay32MDd.lib")
#else
#pragma comment(lib, "libeay32MD.lib")
#pragma comment(lib, "ssleay32MD.lib")
#endif

#include <stdio.h>
#include <stdlib.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>

int main ( int argc, char *argv[] )
{
	// 秘密鍵を作る
	const int keybitLength = 2048;
	const int exponent = 65537;
	RSA *rsa = RSA_generate_key( keybitLength, exponent, NULL, NULL );
	if ( rsa == NULL )
	{
		perror("RSA_generate_key() が不成立");
		return 0;
	}

	// argv[1] 次第で鍵をファイルに保存する
	if ( argc > 1 )
	{
		FILE *fp;
		fopen_s( &fp, argv[1], "w" );
		if ( fp != NULL )
		{
			PEM_write_RSAPrivateKey( fp, rsa, NULL, NULL, 0, NULL, NULL );
			fclose( fp );
		}else{
			perror("ファイルを作成できません");
		}
	}

	return 0;
}