2012-07-24 55 views
0

我想驗證證書是否以其格式有效,所以我寫了這個代碼,但它似乎有一個錯誤錯誤:無法將'std :: string'轉換爲'X509 *'參數'1'爲'EVP_PKEY * X509_get_pubkey(X509 *)'

if (validConfigFile()) {  
    INIReader reader(CONFIG_FILE); 
    string certFile= reader.Get("Server", "cert-file", "None"); 
    if (certFile == "None") { 
     syslog(LOG_ERR, "cert-file in configuration file is not properly adjusted"); 
     exit(EXIT_FAILURE); } 
    else { 
     std::string fileName(certFile); 
     ifstream fin(fileName.c_str()); 
     if(fin.fail()) { 
      syslog(LOG_ERR, "cert-file not found in its file path"); 
      exit(EXIT_FAILURE); } 
     else { 
      OpenSSL_add_all_digests(); 
      SSL_CTX *sslctx = SSL_CTX_new(SSLv23_server_method()); 
      SSL_CTX_use_certificate_file(sslctx, certFile, SSL_FILETYPE_PEM); 
      SSL *ssl = SSL_new(sslctx); 
      X509 *CERT = SSL_get_certificate(ssl); 
      if (X509_verify(CERT,X509_get_pubkey(CERT)) == -1) { 
       syslog(LOG_ERR, "cert-file not valid"); 
       exit(EXIT_FAILURE); } 
     } 
    } 
} 

編譯時我收到此錯誤

/main.cpp:68: error: cannot convert ‘std::string’ to ‘const char*’ for argument ‘2’ to ‘int SSL_CTX_use_certificate_file(SSL_CTX*, const char*, int)’ 

main.cpp:70: error: expected unqualified-id before ‘char’ for that line : X509 *CERT = SSL_get_certificate(ssl); 

回答

1

章安格

SSL_CTX_use_certificate_file(sslctx, certFile, SSL_FILETYPE_PEM); 

SSL_CTX_use_certificate_file(sslctx, certFile.c_str(), SSL_FILETYPE_PEM); 
+0

怎麼樣的main.cpp一個char*:70:錯誤:該行「字符」之前預期不合格的ID:X509 * CERT = SSL_get_certificate(SSL); – 2012-07-24 13:10:02

2

的std :: string沒有implizit轉換爲char *(C風格的字符串),所以使用的方法,而不是c_str()

SSL_CTX_use_certificate_file(sslctx, certFile.c_str(), SSL_FILETYPE_PEM); 
+0

main.cpp:70:錯誤:期望在該字符串'char'之前的非限定id:X509 * CERT = SSL_get_certificate(ssl); – 2012-07-24 13:09:56

1

嘗試使用c_str()

SSL_CTX_use_certificate_file(sslctx, certFile.c_str(), SSL_FILETYPE_PEM); 
               ^
               ^

,而不是獲得從string

+0

main.cpp:70:錯誤:期望在該字符串'char'之前的非限定id:X509 * CERT = SSL_get_certificate(ssl); – 2012-07-24 13:10:14

+0

是的,我已經包括它 – 2012-07-24 13:37:24

+0

所以你重新編譯與c_str()修復,現在你只是有70行編譯器錯誤? – mathematician1975 2012-07-24 13:42:06

相關問題