【问题标题】:error: cannot convert ‘std::string’ to ‘X509*’ for argument ‘1’ to ‘EVP_PKEY* X509_get_pubkey(X509*)’错误:无法将参数“1”的“std::string”转换为“X509*”到“EVP_PKEY* X509_get_pubkey(X509*)”
【发布时间】:2012-07-24 13:01:41
【问题描述】:

我想验证证书的格式是否有效,所以我写了这段代码,但似乎有错误

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);

【问题讨论】:

    标签: c++ ssl openssl ssl-certificate


    【解决方案1】:

    std::string 没有隐式转换为 char*(C 风格字符串),因此请改用 c_str() 方法:

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

    【讨论】:

    • main.cpp:70 怎么样:错误:该行的“char”之前的预期 unqualified-id :X509 *CERT = SSL_get_certificate(ssl);
    【解决方案2】:

    改变

    SSL_CTX_use_certificate_file(sslctx, certFile, SSL_FILETYPE_PEM);
    

    进入

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

    【讨论】:

    • main.cpp:70 怎么样:错误:该行的“char”之前的预期 unqualified-id :X509 *CERT = SSL_get_certificate(ssl);
    【解决方案3】:

    尝试使用c_str()

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

    而不是从string 获取char*

    【讨论】:

    • main.cpp:70 怎么样:错误:该行的“char”之前的预期 unqualified-id :X509 *CERT = SSL_get_certificate(ssl);
    • 所以你用 c_str() 修复重新编译,现在你只有第 70 行编译器错误?
    • main.cpp:70:错误:该行的“char”之前的预期 unqualified-id:X509 *CERT = SSL_get_certificate(ssl);
    • @AnwarMohamed 好的,我帮不上忙。当您从原始问题编辑问题时,您可能需要创建一个新问题,以便在您已经获得答案后添加额外的编译器错误。现在你的问题标题没有反映你的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 2023-03-21
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多