2017-12-29 18 views
1

Ich versuche, das sichere Helloworld-Programm auszuführen, um die Unterstützung von TLS im GRPC-Code zu überprüfen. Ich bekomme diesen FehlerFehler in Grpc mit TLS-Unterstützung

E1228 23:15:44.054232298 10843 ssl_transport_security.cc:621] Invalid cert chain file. 
E1228 23:15:44.054286682 10843 security_connector.cc:1108] Handshaker factory creation failed with TSI_INVALID_ARGUMENT. 
E1228 23:15:44.054304555 10843 server_secure_chttp2.cc:83] {"created":"@1514520944.054294700","description":"Unable to create secure server with credentials of type Ssl.","file":"src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc","file_line":62,"security_status":1} 
Server listening on localhost:50051 
Segmentation fault (core dumped) 

Folgendes ist mein Server-Code.

std::string server_address ("localhost:50051"); 

std::string key; 
std::string cert; 
std::string root; 

read ("server.crt", cert); 
read ("server.key", key); 
read ("ca.crt", root); 

ServerBuilder builder; 

grpc::SslServerCredentialsOptions::PemKeyCertPair keycert = 
{ 
    key, 
    cert 
}; 

grpc::SslServerCredentialsOptions sslOps; 
sslOps.pem_root_certs = root; 
sslOps.pem_key_cert_pairs.push_back (keycert); 

builder.AddListeningPort(server_address, grpc::SslServerCredentials(sslOps)); 

GreeterServiceImpl service; 
builder.RegisterService(&service); 

std::unique_ptr <Server> server (builder.BuildAndStart()); 
std::cout << "Server listening on " << server_address << std::endl; 

server->Wait(); 

Ich versuche nur, den Server zu betreiben. CLient ist noch nicht einmal auf dem Bild. Hier ist das Skript, das ich verwendet habe, um die Schlüssel zu generieren.

# Generate valid CA 
openssl genrsa -passout pass:1234 -des3 -out ca.key 4096 
openssl req -passin pass:1234 -new -x509 -days 365 -key ca.key -out ca.crt -subj "/C=CA/ST=Ontario/L=Ontario/O=Test/OU=Test/CN=Root CA" 

# Generate valid Server Key/Cert 
openssl genrsa -passout pass:1234 -des3 -out server.key 4096 
openssl req -passin pass:1234 -new -key server.key -out server.csr -subj "/C=CA/ST=Ontario/L=Ontario/O=Test/OU=Server/CN=localhost" 
openssl x509 -req -passin pass:1234 -days 365 -in server.csr -CA ca.crt - 
CAkey ca.key -set_serial 01 -out server.crt 

# Remove passphrase from the Server Key 
openssl rsa -passin pass:1234 -in server.key -out server.key 

# Generate valid Client Key/Cert 
openssl genrsa -passout pass:1234 -des3 -out client.key 4096 
openssl req -passin pass:1234 -new -key client.key -out client.csr -subj "/C=CA/ST=Ontario/L=Ontario/O=Test/OU=Client/CN=localhost" 
openssl x509 -passin pass:1234 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt 

# Remove passphrase from Client Key 
openssl rsa -passin pass:1234 -in client.key -out client.key 

Jede Hilfe würde sehr geschätzt werden. Danke

Antwort

1

Der Fehler sieht aus, als ob etwas falsch mit dem Laden des Servers x509-Zertifikat war. Haben Sie Ihren Serverschlüssel/das Zertifikat und das CA-Zertifikat im selben Verzeichnis Ihrer Server-Binärdatei abgelegt?

Ich benutze Ihr Skript, um Schlüssel und Zertifikate zu generieren. Ich benutze den Greeter Client/Server Code von https://github.com/grpc/grpc/issues/9593 Alles funktioniert gut. Ich konnte deinen Fehler nicht duplizieren.

+0

Vielen Dank für Ihren ersten Beitrag und vielen Dank für die Aufnahme einer Codenummer. Sie können Ihre Antwort verbessern, indem Sie ihnen den relevantesten Code in Ihrer Antwort bereitstellen. –