SSL-сертификат, аутентификация не через бережливость, но нормально через браузер

Вот как я генерирую свой SSL-сертификат, ключ и т. д.:

openssl genrsa -out server.key 1024
openssl rsa -in server.key -out new_key.pem
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 10000 -in server.csr -signkey new_key.pem -out server.crt

Это работает, я вижу вывод в хроме, хотя я получаю предупреждение, что я собираюсь получить вирусы в первую очередь.

openssl s_server -cert server.crt -www -key new_key.pem

это фрагмент с сервера. Честно говоря, я не совсем уверен, что делает каждая строка, хотя у меня есть хорошая идея:

socketFactory->server(true); // this is the server
socketFactory->authenticate(false); // no auth?
socketFactory->loadCertificate("server.crt"); 
socketFactory->loadPrivateKey("new_key.pem");

client:

socketFactory->loadTrustedCertificates("server.crt");
socketFactory->authenticate(true); //auth? wierd, right? This guy does this:[1]

[1] http://permalink.gmane.org/gmane.comp.lib.thrift .user/1651

Если я закомментирую loadTrustedCertificatesв клиенте, я получу исключение непроверенного сертификата SSL. Когда эта строка остается, я получаю исключение сбоя аутентификации.

Вот два гораздо более длинных фрагмента кода, которые лучше раскрывают приведенные выше фрагменты.
сервер:

shared_ptr handler(new SkullduggeryHandler());
shared_ptr transportFactory =
        shared_ptr(new TBufferedTransportFactory());
shared_ptr protocolFactory(new TBinaryProtocolFactory());
shared_ptr processor(new SkullduggeryProcessor(handler));
shared_ptr socketFactory = 
      shared_ptr(new TSSLSocketFactory());
socketFactory->server(true);
socketFactory->authenticate(false);
socketFactory->loadCertificate("server.crt");
socketFactory->loadPrivateKey("new_key.pem");
shared_ptr socket(new TSSLServerSocket(port, socketFactory));
TThreadedServer server(processor,
                               socket,
                               transportFactory,
                               protocolFactory);
server.serve();

клиент:

shared_ptr  socketFactory = shared_ptr(new TSSLSocketFactory());
socketFactory->loadTrustedCertificates("server.crt");
socketFactory->authenticate(false);
shared_ptr socket = socketFactory->createSocket(configuration.ip, configuration.port);
shared_ptr transport(new TBufferedTransport(socket));
shared_ptr protocol(new TBinaryProtocol(transport));
SkullduggeryClient client(protocol);
transport->open();

Спасибо, что нашли время, чтобы прочитать это. Если будут явные ошибки, буду рад услышать об этом. Это было проклятием моего существования слишком долго. Слишком долго.

8
задан demonslayer319 9 June 2012 в 21:35
поделиться