Исследование структуры CertInfo библиотеки gloox-1.0
вернуться на страницу проекта

Пока особых комментариев к коду писать не буду. В ближайшее время планирую привести в нарядный вид перевод связанных частей руководства и тогда дополню текст более подробными описаниями

// Jabb_Cer.cpp - получение информации о сертификате с использованием
// структуры struct CertInfo библиотеки gloox
// Михайлов Алексей aka iboxjo (iboxjo.h1.ru) 04.06.2012

#include <iostream>
#include <string>
#include <gloox/client.h>
#include <gloox/message.h>
#include <gloox/messagehandler.h>
#include <gloox/connectionlistener.h>
#include <gloox/disco.h>
#include <time.h>

using namespace std;
using namespace gloox;

std::string LOGIN; // имя исследуемого сервера например jabber.ru


class ConnListener : public ConnectionListener {
public:
    virtual void onConnect() {
    }
    virtual void onDisconnect(ConnectionError e) {
    }
   
    virtual bool onTLSConnect(const CertInfo& Info) {
    // получение времени и даты начала и окончания
    // действия сертификата ( date_from и date_to)
       time_t tm = Info.date_from;
       time_t tm_to = Info.date_to;
       cout << "\t Certificate information to " << LOGIN << endl;
       cout << "\t========================================" << endl;
      // числовой код статуса можно получить так cout << "\tServer status: " << Info.status;
        if (Info.status !=0)
            {
            cout << "\t !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
            cout << "\t !!!  The certificate has a problem !!!" << endl;
            cout << "\t !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
            // parsing binary Status Cert
            if ((CertInvalid) & Info.status)
                {
                    cout << "\t- The certificate is not trusted " << endl;
                }
            if (( CertSignerUnknown) & Info.status)
                {
                    cout << "\t- The certificate hasn't got a kown issuer" << endl;
                }
            if ((CertRevoked) & Info.status)
                {
                    cout << "\t- The certificate has been revoked " << endl;
                }
            if ((CertExpired) & Info.status)
                {
                    cout << "\t- The certificate has expired " << endl;
                }
            if ((CertNotActive) & Info.status)
                {
                    cout << "\t- The certificate is not yet active " << endl;
                }
            if ((CertWrongPeer) & Info.status)
                {
                    cout << "\t- The certificate has not issued for the peer we're connected to " << endl;
                }
            if ((CertSignerNotCa) & Info.status)
                {
                    cout << "\t- The signer is not CA " << endl;
                }
            cout << endl;
            }
            // end parsing
        else
            // если Info.status=0 то сертификат валиден
            cout << " *** Cert is OK!" << endl;
        // собственно данные сервера (структуры будет дано ниже)   
       cout << "\tChain: " << Info.chain << endl;
       cout << "\tIssuer: " << Info.issuer << endl;
       cout << "\tServer: " << Info.server << endl;
       cout << "\tCert date from: " << ctime(&tm);
       cout << "\tCert date to: " << ctime(&tm_to);
       cout << "\tProtocol: " << Info.protocol << endl;
       cout << "\tCipher: " << Info.cipher << endl;
       cout << "\tMAC: " << Info.mac << endl;
       cout << "\tCompression: " << Info.compression << endl;
       cout << "\t========================================" << endl;
     return false;

    }
};

class Bot {
public:
    Bot() {
        cout << "Input Jabber server JID: ";
        cin >>  LOGIN;
        cout << "\n";
        JID jid(LOGIN);
        client = new Client(jid,"testcert");
        connListener = new ConnListener();
        client->registerConnectionListener(connListener);
        client->connect(true);

    }

    ~Bot() {
        delete client;
        delete connListener;
    }


private:
   Client* client;
   ConnListener* connListener;
};

int main() {
    Bot mybot;

}