openssl 라이브러리를 사용하여 암호화 된 통신 (TLSv1.2)을 구현하는 클라이언트/서버 아키텍처가 있습니다. "자체 서명 된"인증서를 사용하고 있기 때문에 서버의 ID를 확인하기 위해 클라이언트 측에 서버의 공개 키 (server_public_key.pem)의 실제 복사본을 넣은 다음 그 인증서가 TLS의 핸드 셰이크 단계에서 수신되었습니다. 지금Openssl X509 cert는 사람이 읽을 수있는 문자열을 얻습니다.
X509 *cert = SSL_get_peer_certificate(ssl);
나는이 객체에 포함 된 공개 키의 사람이 읽을 수있는 문자열을 추출합니다 : 클라이언트에
, 나는 후자를 검색 할 수 있습니다.은 내가 이런 식으로 인쇄 할 수 있다는 사실을 알고 :
EVP_PKEY *pkey = X509_get_pubkey(cert);
PEM_write_PUBKEY(stdout, pkey);
하지만 문자열로 유지 (대신에 표준 출력으로 전송) 할 필요가있다. 어떻게해야합니까?
작동합니다! 고맙습니다 ! – stackpic91
다른 질문이 있습니다. 내가 "char buff [size];" 그런 다음 "BIO_read (mem, buff, size)"여기서 mem는 BIO 객체이고 "size"는 읽어야 할 바이트 수이며, buff의 끝에는 이상한 문자가 있습니다. 내가 메모리 할당에 몇 가지 오류를하고있는 것 같아요. 어떠한 제안 ? 이 방법으로 버퍼를 초기화하면 "char buff [] =" ""이 오류가 발생합니다. "*** 스택 스매싱 감지 *** :" – stackpic91
해결되었습니다. 나는 버프의 끝에 0을 넣는 것을 잊었다.) – stackpic91