
openssl_cms_verify에서 signer_info 구조체는 CMS (Certificate Management System) 인증서의 서명자 정보를 포함하는 구조체입니다. signer_info 구조체는 다음과 같은 필드를 가지고 있습니다.
- version: 서명자 정보의 버전 번호
- sid: 서명자 ID
- issuer_id: 서명자 ID
- serial_number: 서명자 인증서의 시리얼 번호
- issuer_name: 서명자 인증서의 발급자 이름
- validity: 서명자 인증서의 유효 기간
- subject_name: 서명자 인증서의 주체 이름
- subject_public_key_info: 서명자 인증서의 주체 공개 키 정보
openssl_cms_verify에서 signer_info 구조체를 사용하여 인증서의 서명자 정보를 추출하는 방법은 다음과 같습니다.
1. openssl_cms_verify 함수를 호출하여 CMS 인증서를 검증합니다.
2. 검증된 CMS 인증서의 signer_info 구조체를 추출합니다.
3. signer_info 구조체의 필드를 사용하여 서명자 정보를 추출합니다.
예시 코드는 다음과 같습니다.
#hostingforum.kr
c
#include
// CMS 인증서를 검증하고 서명자 정보를 추출하는 함수
void extract_signer_info(BIO *bio) {
CMS_ContentInfo *cms = NULL;
X509 *cert = NULL;
X509_NAME *issuer_name = NULL;
X509_NAME *subject_name = NULL;
ASN1_INTEGER *serial_number = NULL;
ASN1_OBJECT *issuer_id = NULL;
ASN1_OBJECT *subject_id = NULL;
ASN1_INTEGER *version = NULL;
ASN1_OCTET_STRING *sid = NULL;
// CMS 인증서를 검증합니다.
cms = PEM_read_bio_CMS(bio, NULL, NULL, NULL);
if (!cms) {
printf("Error: Unable to read CMS certificaten");
return;
}
// 서명자 정보를 추출합니다.
cert = CMS_get0_signer_info(cms);
if (!cert) {
printf("Error: Unable to extract signer infon");
return;
}
// 서명자 이름을 추출합니다.
issuer_name = X509_get_issuer_name(cert);
subject_name = X509_get_subject_name(cert);
// 서명자 시리얼 번호를 추출합니다.
serial_number = X509_get_serialNumber(cert);
// 서명자 ID를 추출합니다.
issuer_id = OBJ_txt2obj(X509_get_issuer_name(cert), 0);
subject_id = OBJ_txt2obj(X509_get_subject_name(cert), 0);
// 서명자 버전 번호를 추출합니다.
version = ASN1_INTEGER_get(X509_get_version(cert));
// 서명자 SID를 추출합니다.
sid = ASN1_OCTET_STRING_get(cert);
// 추출한 서명자 정보를 출력합니다.
printf("서명자 이름: %sn", X509_NAME_oneline(issuer_name, NULL, 0));
printf("서명자 시리얼 번호: %sn", ASN1_OBJECT_name(issuer_id));
printf("서명자 ID: %sn", ASN1_OBJECT_name(subject_id));
printf("서명자 버전 번호: %dn", ASN1_INTEGER_get(version));
printf("서명자 SID: %sn", ASN1_OCTET_STRING_data(sid));
}
int main() {
BIO *bio = BIO_new_file("example.cer", "rb");
extract_signer_info(bio);
BIO_free(bio);
return 0;
}
이 예시 코드는 openssl_cms_verify 함수를 호출하여 CMS 인증서를 검증하고 서명자 정보를 추출하는 방법을 보여줍니다. 추출한 서명자 정보를 출력하는 코드를 추가하여 서명자 이름, 시리얼 번호, ID, 버전 번호, SID를 출력할 수 있습니다.
2025-04-22 22:43