Đây là cách tôi tạo SSL cert của tôi, chìa khóa, vv:SSL Certificate, không chứng thực qua hành tiết kiệm, nhưng OK qua trình duyệt
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
này làm việc, tôi có thể nhìn thấy đầu ra trong chrome, mặc dù tôi nhận được một cảnh báo rằng tôi sắp nhiễm virus trước.
openssl s_server -cert server.crt -www -key new_key.pem
đây là đoạn trích từ máy chủ. Sẽ thật mà nói, tôi không chắc chắn chính xác những gì mỗi dòng đang làm, dù tôi có một ý tưởng tốt:
socketFactory->server(true); // this is the server
socketFactory->authenticate(false); // no auth?
socketFactory->loadCertificate("server.crt");
socketFactory->loadPrivateKey("new_key.pem");
khách hàng:
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
Nếu tôi nhận xét ra loadTrustedCertificates
trong ứng dụng khách, sau đó tôi nhận được một ngoại lệ chứng chỉ SSL chưa được xác minh. Với dòng đó còn lại, tôi nhận được một ngoại lệ thất bại auth.
Dưới đây là 2 đoạn mã dài hơn, đặt các đoạn mã trên ở góc độ tốt hơn.
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();
khách hàng:
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();
Cảm ơn đã dành thời gian để đọc. Nếu có lỗi rõ ràng, tôi sẽ rất vui khi nghe về nó. Đây đã là lệnh cấm tồn tại của tôi quá lâu rồi. Quá lâu.