2017-09-14 150 views
1

我有一個客戶端/服務器體系結構,其中使用openssl庫實現加密通信(TLSv1.2)。 由於我使用「自簽名」證書,爲了驗證服務器的身份,我的想法是在客戶端放置服務器公鑰的物理副本(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); 

但我需要保持它作爲一個字符串(而不是將其發送到標準輸出)。我怎樣才能做到這一點 ?

回答

1

使用BIO_new()創建一個新的BIO,由內部緩衝區(初始爲空)支持。

然後使用PEM_write_bio_PUBKEY()將公鑰寫入BIO,此時使用BIO手冊頁中記錄的功能檢索公鑰。

請參閱引用的文檔以獲得創建BIO的簡單示例,然後寫入它,然後從中讀取它。用PEM_write_bio_PUBKEY()代替寫入操作應該足夠了。

+0

它的工作原理!謝謝 ! – stackpic91

+0

我還有一個問題。如果我做「char buff [size];」然後是「BIO_read(mem,buff,size)」,其中mem是BIO對象,「size」是要讀取的字節數,在buff結尾處有一些奇怪的字符。我想我在內存分配上做了一些錯誤。任何建議?請注意,如果我以這種方式初始化buff「char buff [] =」「」我得到這個錯誤:「*** stack smashing detected ***:」 – stackpic91

+0

解決了。我忘了在buff的末尾插入0;) – stackpic91

相關問題