Allow specifying certificate and key in separate files.

Our test certificate files in ssl/test/runner (which I often use out of
laziness) are not specified in a way compatible with the bssl tool.

Change-Id: I216d9555242e6d4be75b8172579186398b862394
Reviewed-on: https://boringssl-review.googlesource.com/14826
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/tool/server.cc b/tool/server.cc
index 13c7825..ae03905 100644
--- a/tool/server.cc
+++ b/tool/server.cc
@@ -44,9 +44,14 @@
     },
     {
         "-key", kOptionalArgument,
-        "PEM-encoded file containing the private key, leaf certificate and "
-        "optional certificate chain. A self-signed certificate is generated "
-        "at runtime if this argument is not provided.",
+        "PEM-encoded file containing the private key. A self-signed "
+        "certificate is generated at runtime if this argument is not provided.",
+    },
+    {
+        "-cert", kOptionalArgument,
+        "PEM-encoded file containing the leaf certificate and optional "
+        "certificate chain. This is taken from the -key argument if this "
+        "argument is not provided.",
     },
     {
         "-ocsp-response", kOptionalArgument, "OCSP response file to send",
@@ -147,13 +152,16 @@
 
   // Server authentication is required.
   if (args_map.count("-key") != 0) {
-    std::string key_file = args_map["-key"];
-    if (!SSL_CTX_use_PrivateKey_file(ctx.get(), key_file.c_str(), SSL_FILETYPE_PEM)) {
-      fprintf(stderr, "Failed to load private key: %s\n", key_file.c_str());
+    std::string key = args_map["-key"];
+    if (!SSL_CTX_use_PrivateKey_file(ctx.get(), key.c_str(),
+                                     SSL_FILETYPE_PEM)) {
+      fprintf(stderr, "Failed to load private key: %s\n", key.c_str());
       return false;
     }
-    if (!SSL_CTX_use_certificate_chain_file(ctx.get(), key_file.c_str())) {
-      fprintf(stderr, "Failed to load cert chain: %s\n", key_file.c_str());
+    const std::string &cert =
+        args_map.count("-cert") != 0 ? args_map["-cert"] : key;
+    if (!SSL_CTX_use_certificate_chain_file(ctx.get(), cert.c_str())) {
+      fprintf(stderr, "Failed to load cert chain: %s\n", cert.c_str());
       return false;
     }
   } else {