본문 바로가기

Tech

[OpenSSL] 인증서 생성과 GitHub 업로드

인증서는 공개키 배포를 위해 포장한 전자서류이다.

이 전자 서류를 OpenSSL로 만들 수 있다.

 

코드를 보자.

 

void GenerateCertificatinECDSA()
{
	EC_KEY			*ecKey = NULL;
	EVP_PKEY		*pKey = NULL;
	X509			*x509;
	X509_NAME		*nameX509;
	int				nidEcc;
	FILE			*fp;


	// Set Key Type.
	nidEcc = OBJ_txt2nid("secp521r1");
	ecKey = EC_KEY_new_by_curve_name(nidEcc);
	if (ecKey == NULL)	ERR_print_errors_fp(stderr);

	// Generate Key.
	EC_KEY_generate_key(ecKey);

	//
	// Create Certificate
	//
	x509 = X509_new();

	// Set Elements
	ASN1_INTEGER_set(X509_get_serialNumber(x509), 1);
	X509_gmtime_adj(X509_get_notBefore(x509), 0);			// current time
	X509_gmtime_adj(X509_get_notAfter(x509), 31536000L);	// span 60 * 60 * 24 * 365

	nameX509 = X509_get_subject_name(x509);
	X509_NAME_add_entry_by_txt(nameX509, "C", MBSTRING_ASC, (unsigned char *)"KR", -1, -1, 0);
	X509_NAME_add_entry_by_txt(nameX509, "O", MBSTRING_ASC, (unsigned char *)"TEBEK NET", -1, -1, 0);
	X509_NAME_add_entry_by_txt(nameX509, "CN", MBSTRING_ASC, (unsigned char *)"localhost", -1, -1, 0);
	X509_set_issuer_name(x509, nameX509);

	// Set Public Key x.509
	pKey = EVP_PKEY_new();
	EVP_PKEY_assign_EC_KEY(pKey, ecKey);
	X509_set_pubkey(x509, pKey);
	
	// Self Signing.
	X509_sign(x509, pKey, EVP_sha256());

	// write private key
	fopen_s(&fp, "key.pem", "wb");
	PEM_write_PrivateKey(fp, pKey, EVP_aes_256_cbc_hmac_sha256(),
						 (unsigned char *)"my password", 11, NULL, NULL);
	fclose(fp);

	// write public key
	fopen_s(&fp, "cert.pem", "wb");
	PEM_write_X509(fp, x509);
	fclose(fp);

//	EC_KEY_free(ecKey);		// maybe free ecKey at X509_free()
	EVP_PKEY_free(pKey);
	X509_free(x509);
}

 

키 생성후에 포장 내용을 집어넣고 SELF-SIGN을 한다.

그리고 비밀키; 인증서로 나눠서 저장하면 된다.

 

코드가 이해 안간다면 문의나 구글 검색을 바라며...

오늘의 주요 포스트내용은 github에 코드를 올리는 것이다.

 

VS에서 이미 있는 프로젝트를 올리려다가 프로젝트 폴더에 로컬 레포지토리 생성이 안되어 실패했다.

그래서 새 레포지토리를 만든 후 프로젝트를 복사해 넣는 방법을 사용했다.

 

 

1. github에 기관을 먼저 생성한다. 자기 계정을 쓸 사람은 그냥 써도 좋다.

 

 

 

2. 새로운 레포지토리를 생성한다.

 

홈페이지에서 Initialize를 해두면 초기화가 편하다. 빨간 원.

 

 

3. VS에서 일단 팀 탐색기로 들어가야 한다.

 

 

필자는 밑에 새로만들기나 추가를 눌러서 현재 프로젝트 폴더를 연동시키려고 했는데 실패했다.

독자는 이 작업을 먼저 해보기를 바란다.

 

 

4. 로컬 리포지토리를 새로 만든다.

 

잘 생성된 것을 볼 수 있다.

경로는 각자의 경로에 맞게 바꿔야 한다.

저 로컬 리포지토리 폴더에 프로젝트가 존재해야 한다.

 

 

5. 홈으로가서 동기화로 들어간다.

 

 

6. 푸시 한다.

 

 

7. 깃 허브 레포지토리를 넣고 게시해보자.

 

 

깃허브 계정으로 로그인을 하면 소스 코드가 올라간다.

다음 링크를 확인해보면 된다.

 

https://github.com/tebeknet/TestOpenSSL

 

 

이 포스팅의 오류에 대한 문의나 지적은 언제든지 환영한다.