2012-04-16 204 views
0

我使用openssl開發應用程序,基本上我需要找到一種方法將遠程證書添加到商店,如果用戶選擇。我是很新的OpenSSL的,但我敢肯定,這是我會把邏輯來添加證書:將證書添加到可信證書

if(SSL_get_verify_result(ssl) != X509_V_OK) { 
    printf("Certificate did not validate.\nDo you wish to add this certificate to the trust certificate store?(yes/no)\n"); 
    char response[3]; 

    while(1) { 
     scanf("%s", response); 

     if(strcmp(response, "yes") == 0) { 
      /* Add the certificate */ 
      break; 
     } 
     else if(strcmp(response, "no") == 0) { 
      BIO_free_all(bio); 
      SSL_CTX_free(ctx); 
      return 0; 
     } 
     else { 
      printf("yes or no, please.\n"); 
     } 
    } 
} 

我試過OpenSSL文檔,但我發現它是相當混亂和很難在那裏找到任何細節。任何幫助,將不勝感激。

回答

1

如果驗證失敗,這意味着您的證書驗證路徑(您使用SSL_CTX_load_verify_locations()方法(或類似方法)加載的路徑)無法驗證來自對等方的證書(您可以使用SSL_get_peer_certificate獲取此證書( ) 方法)。

這意味着您要驗證的證書不是由您的鏈中的任何證書籤署的,除非您更改鏈,否則它將不會被驗證。

要做你想做的事情取決於你要驗證的證書是否是自簽名證書。如果它是自簽名證書,則只需將其添加到您獲取信任位置的位置(調用SSL_CTX_load_verify_locations()方法時指定的位置)即可。如果它不是自簽名的,你必須找到一種方法來獲得證書的整個鏈,這取決於你正在工作的環境。

問候。

+0

現在,它是一個自簽名證書。我將研究SSL_get_peer_certificate()函數。謝謝! – Raphael 2012-04-16 17:36:20