0

証明書がその形式で有効かどうかを確認したいので、このコードを書きましたが、エラーがあるようです

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

3 に答える 3

2

std::string には char* (C スタイルの文字列) への暗黙的な変換がないため、c_str()代わりに次のメソッドを使用します。

SSL_CTX_use_certificate_file(sslctx, certFile.c_str(), SSL_FILETYPE_PEM);
于 2012-07-24T13:04:05.503 に答える
1

変化する

SSL_CTX_use_certificate_file(sslctx, certFile, SSL_FILETYPE_PEM);

の中へ

SSL_CTX_use_certificate_file(sslctx, certFile.c_str(), SSL_FILETYPE_PEM);
于 2012-07-24T13:03:53.413 に答える
1

使ってみてc_str()

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

代わりにchar*からstring

于 2012-07-24T13:04:08.843 に答える