diff options
author | Jan Tattermusch <jtattermusch@google.com> | 2015-03-03 09:30:55 -0800 |
---|---|---|
committer | Jan Tattermusch <jtattermusch@google.com> | 2015-03-09 16:05:05 -0700 |
commit | b0829ebaf174216787c9a9557cf4a40afa2c8023 (patch) | |
tree | f392cff9c5341a9e765aec6a161c8d4025a7dff5 /src/csharp/Grpc.IntegrationTesting | |
parent | 874e53ad2d61ae3846a4a9672eb871cc51bb0c84 (diff) |
C# server side TLS support
Diffstat (limited to 'src/csharp/Grpc.IntegrationTesting')
5 files changed, 102 insertions, 15 deletions
diff --git a/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj b/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj index 8f7a17efcb..438bf9e95d 100644 --- a/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj +++ b/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj @@ -49,6 +49,7 @@ <Compile Include="TestServiceImpl.cs" /> <Compile Include="InteropServer.cs" /> <Compile Include="InteropClient.cs" /> + <Compile Include="TestCredentials.cs" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <ItemGroup> diff --git a/src/csharp/Grpc.IntegrationTesting/InteropClient.cs b/src/csharp/Grpc.IntegrationTesting/InteropClient.cs index 30301f165b..2992c42ae9 100644 --- a/src/csharp/Grpc.IntegrationTesting/InteropClient.cs +++ b/src/csharp/Grpc.IntegrationTesting/InteropClient.cs @@ -51,7 +51,7 @@ namespace Grpc.IntegrationTesting { public bool help; public string serverHost= "127.0.0.1"; - public string serverHostOverride = "foo.test.google.fr"; + public string serverHostOverride = TestCredentials.DefaultHostOverride; public int? serverPort; public string testCase = "large_unary"; public bool useTls; @@ -103,16 +103,7 @@ namespace Grpc.IntegrationTesting Credentials credentials = null; if (options.useTls) { - string caPath = "data/ca.pem"; // Default testing CA - if (!options.useTestCa) - { - caPath = Environment.GetEnvironmentVariable("SSL_CERT_FILE"); - if (string.IsNullOrEmpty(caPath)) - { - throw new ArgumentException("CA path environment variable is not set."); - } - } - credentials = new SslCredentials(File.ReadAllText(caPath)); + credentials = TestCredentials.CreateTestClientCredentials(options.useTestCa); } ChannelArgs channelArgs = null; diff --git a/src/csharp/Grpc.IntegrationTesting/InteropClientServerTest.cs b/src/csharp/Grpc.IntegrationTesting/InteropClientServerTest.cs index 4bb0b9ee51..ab2d6f4a6a 100644 --- a/src/csharp/Grpc.IntegrationTesting/InteropClientServerTest.cs +++ b/src/csharp/Grpc.IntegrationTesting/InteropClientServerTest.cs @@ -59,9 +59,13 @@ namespace Grpc.IntegrationTesting server = new Server(); server.AddServiceDefinition(TestServiceGrpc.BindService(new TestServiceImpl())); - int port = server.AddPort(host + ":0"); + int port = server.AddPort(host + ":0", TestCredentials.CreateTestServerCredentials()); server.Start(); - channel = new Channel(host + ":" + port); + + var channelArgs = ChannelArgs.NewBuilder() + .AddString(ChannelArgs.SslTargetNameOverrideKey, TestCredentials.DefaultHostOverride).Build(); + + channel = new Channel(host + ":" + port, TestCredentials.CreateTestClientCredentials(true), channelArgs); client = TestServiceGrpc.NewStub(channel); } diff --git a/src/csharp/Grpc.IntegrationTesting/InteropServer.cs b/src/csharp/Grpc.IntegrationTesting/InteropServer.cs index a25d3b3530..24d72da0c3 100644 --- a/src/csharp/Grpc.IntegrationTesting/InteropServer.cs +++ b/src/csharp/Grpc.IntegrationTesting/InteropServer.cs @@ -34,6 +34,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.IO; using System.Text.RegularExpressions; using System.Threading.Tasks; using Google.ProtocolBuffers; @@ -49,7 +50,7 @@ namespace Grpc.IntegrationTesting private class ServerOptions { public bool help; - public int? port; + public int? port = 8070; public bool useTls; } @@ -93,7 +94,14 @@ namespace Grpc.IntegrationTesting server.AddServiceDefinition(TestServiceGrpc.BindService(new TestServiceImpl())); string addr = "0.0.0.0:" + options.port; - server.AddPort(addr); + if (options.useTls) + { + server.AddPort(addr, TestCredentials.CreateTestServerCredentials()); + } + else + { + server.AddPort(addr); + } Console.WriteLine("Running server on " + addr); server.Start(); diff --git a/src/csharp/Grpc.IntegrationTesting/TestCredentials.cs b/src/csharp/Grpc.IntegrationTesting/TestCredentials.cs new file mode 100644 index 0000000000..b31abf1181 --- /dev/null +++ b/src/csharp/Grpc.IntegrationTesting/TestCredentials.cs @@ -0,0 +1,83 @@ +#region Copyright notice and license + +// Copyright 2015, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using Google.ProtocolBuffers; +using Grpc.Core; +using Grpc.Core.Utils; +using NUnit.Framework; +using grpc.testing; + +namespace Grpc.IntegrationTesting +{ + /// <summary> + /// SSL Credentials for testing. + /// </summary> + public static class TestCredentials + { + public const string DefaultHostOverride = "foo.test.google.fr"; + + public const string ClientCertAuthorityPath = "data/ca.pem"; + public const string ClientCertAuthorityEnvName = "SSL_CERT_FILE"; + + public const string ServerCertChainPath = "data/server1.pem"; + public const string ServerPrivateKeyPath = "data/server1.key"; + + public static SslCredentials CreateTestClientCredentials(bool useTestCa) + { + string caPath = ClientCertAuthorityPath; + if (!useTestCa) + { + caPath = Environment.GetEnvironmentVariable(ClientCertAuthorityEnvName); + if (string.IsNullOrEmpty(caPath)) + { + throw new ArgumentException("CA path environment variable is not set."); + } + } + return new SslCredentials(File.ReadAllText(caPath)); + } + + public static SslServerCredentials CreateTestServerCredentials() + { + var keyCertPair = new KeyCertificatePair( + File.ReadAllText(ServerCertChainPath), + File.ReadAllText(ServerPrivateKeyPath)); + return new SslServerCredentials(new List<KeyCertificatePair> {keyCertPair}); + } + } +} |