Ésta es la forma en que genero mi certificado SSL, llave, etc:certificado SSL, no se autentica mediante el ahorro, pero bien a través del navegador
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
Esto funciona, puedo ver la salida en cromo, aunque consigo una advirtiendo que voy a tener virus primero.
openssl s_server -cert server.crt -www -key new_key.pem
esto es un fragmento del servidor. Voy a ser honesto, no estoy seguro exactamente lo que está haciendo cada línea, aunque no tengo una buena idea:
socketFactory->server(true); // this is the server
socketFactory->authenticate(false); // no auth?
socketFactory->loadCertificate("server.crt");
socketFactory->loadPrivateKey("new_key.pem");
cliente:
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
Si Comente loadTrustedCertificates
en el cliente, luego recibo una excepción de certificado SSL no verificado. Con esa línea, recibo una excepción de error de autenticación.
Aquí hay 2 fragmentos de código mucho más largos, que ponen los fragmentos anteriores en una mejor perspectiva.
servidor:
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();
cliente:
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();
Gracias por tomarse el tiempo para leer esto. Si hay errores evidentes, estaré encantado de saber de eso. Esta ha sido la ruina de mi existencia por mucho tiempo ahora. Demasiado largo.