SSL-Zertifikat, keine Authentifizierung über Sparsamkeit, aber OK über Browser

So generiere ich mein SSL-Zertifikat, meinen SSL-Schlüssel usw.:

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

Dies funktioniert, ich kann die Ausgabe in Chrom sehen, obwohl ich eine Warnung bekomme, dass ich zuerst Viren bekommen werde.

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

Dies ist ein Snippet vom Server. Ich bin mir ehrlich gesagt nicht sicher, was genau jede Leitung tut, obwohl ich eine gute Idee habe:

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

Klient:

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

Wenn ich auskommentiereloadTrustedCertificates Im Client erhalte ich dann eine Ausnahme für ein nicht verifiziertes SSL-Zertifikat. Mit dieser Zeile in, bekomme ich eine Auth-Fehler-Ausnahme.

Hier sind zwei viel längere Codefragmente, die die obigen Ausschnitte in eine bessere Perspektive rücken.
Server:

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

Klient:

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

Vielen Dank, dass Sie sich die Zeit genommen haben, dies zu lesen. Wenn es eklatante Fehler gibt, würde ich mich freuen, davon zu hören. Dies war zu lange der Fluch meines Daseins. Zu lang.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage