From 0492acb9269ab30406455b3de00541ca57cc6526 Mon Sep 17 00:00:00 2001 From: TomPallister Date: Sat, 22 Apr 2023 20:52:51 +0100 Subject: [PATCH 1/4] tests passing on debian 10 --- .gitignore | 2 +- README.md | 2 +- src/Ocelot/Requester/HttpClientBuilder.cs | 3 +- test/Ocelot.AcceptanceTests/HttpTests.cs | 32 ++++++++++++------ .../Ocelot.AcceptanceTests.csproj | 2 +- test/Ocelot.AcceptanceTests/ServiceHandler.cs | 31 ++++++++++++++++- test/Ocelot.AcceptanceTests/SslTests.cs | 18 +++++----- .../AdministrationTests.cs | 4 +-- .../Ocelot.IntegrationTests.csproj | 2 +- test/Ocelot.IntegrationTests/idsrv3test.pfx | Bin 3395 -> 0 bytes test/Ocelot.IntegrationTests/mycert.pfx | Bin 0 -> 2653 bytes .../Ocelot.ManualTest.csproj | 2 +- test/Ocelot.ManualTest/mycert.pfx | Bin 0 -> 2653 bytes test/Ocelot.UnitTests/Ocelot.UnitTests.csproj | 2 +- test/Ocelot.UnitTests/idsrv3test.pfx | Bin 3395 -> 0 bytes test/Ocelot.UnitTests/mycert.pfx | Bin 0 -> 2653 bytes 16 files changed, 70 insertions(+), 30 deletions(-) delete mode 100644 test/Ocelot.IntegrationTests/idsrv3test.pfx create mode 100644 test/Ocelot.IntegrationTests/mycert.pfx create mode 100644 test/Ocelot.ManualTest/mycert.pfx delete mode 100644 test/Ocelot.UnitTests/idsrv3test.pfx create mode 100644 test/Ocelot.UnitTests/mycert.pfx diff --git a/.gitignore b/.gitignore index 4980a426c..220172830 100644 --- a/.gitignore +++ b/.gitignore @@ -183,7 +183,7 @@ ClientBin/ *.dbmdl *.dbproj.schemaview *.pfx -!idsrv3test.pfx +!mycert.pfx *.publishsettings node_modules/ orleans.codegen.cs diff --git a/README.md b/README.md index 959c788d8..f43c12d62 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ A quick list of Ocelot's capabilities for more information see the [documentatio ## How to install -Ocelot is designed to work with ASP.NET and it targets `net6.0`. +Ocelot is designed to work with ASP.NET and it targets `net7.0`. Install Ocelot and it's dependencies using NuGet. diff --git a/src/Ocelot/Requester/HttpClientBuilder.cs b/src/Ocelot/Requester/HttpClientBuilder.cs index 6361d2faf..305777be3 100644 --- a/src/Ocelot/Requester/HttpClientBuilder.cs +++ b/src/Ocelot/Requester/HttpClientBuilder.cs @@ -49,7 +49,8 @@ public IHttpClient Create(DownstreamRoute downstreamRoute) if (downstreamRoute.DangerousAcceptAnyServerCertificateValidator) { - handler.ServerCertificateCustomValidationCallback = (request, certificate, chain, errors) => true; + handler.ServerCertificateCustomValidationCallback = + HttpClientHandler.DangerousAcceptAnyServerCertificateValidator; _logger .LogWarning($"You have ignored all SSL warnings by using DangerousAcceptAnyServerCertificateValidator for this DownstreamRoute, UpstreamPathTemplate: {downstreamRoute.UpstreamPathTemplate}, DownstreamPathTemplate: {downstreamRoute.DownstreamPathTemplate}"); diff --git a/test/Ocelot.AcceptanceTests/HttpTests.cs b/test/Ocelot.AcceptanceTests/HttpTests.cs index e13567ae0..5d25b0462 100644 --- a/test/Ocelot.AcceptanceTests/HttpTests.cs +++ b/test/Ocelot.AcceptanceTests/HttpTests.cs @@ -5,14 +5,14 @@ namespace Ocelot.AcceptanceTests using System.IO; using System.Net; using System.Net.Http; - + using Configuration.File; - + using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.Kestrel.Core; - + using TestStack.BDDfy; - + using Xunit; public class HttpTests : IDisposable @@ -38,7 +38,7 @@ public void should_return_response_200_when_using_http_one() new() { DownstreamPathTemplate = "/{url}", - DownstreamScheme = "https", + DownstreamScheme = "http", UpstreamPathTemplate = "/{url}", UpstreamHttpMethod = new List { "Get" }, DownstreamHostAndPorts = new List @@ -51,7 +51,6 @@ public void should_return_response_200_when_using_http_one() }, DownstreamHttpMethod = "POST", DownstreamHttpVersion = "1.0", - DangerousAcceptAnyServerCertificateValidator = true }, }, }; @@ -76,7 +75,7 @@ public void should_return_response_200_when_using_http_one_point_one() new() { DownstreamPathTemplate = "/{url}", - DownstreamScheme = "https", + DownstreamScheme = "http", UpstreamPathTemplate = "/{url}", UpstreamHttpMethod = new List { "Get" }, DownstreamHostAndPorts = new List @@ -89,7 +88,6 @@ public void should_return_response_200_when_using_http_one_point_one() }, DownstreamHttpMethod = "POST", DownstreamHttpVersion = "1.1", - DangerousAcceptAnyServerCertificateValidator = true }, }, }; @@ -135,7 +133,7 @@ public void should_return_response_200_when_using_http_two_point_zero() const string expected = "here is some content"; var httpContent = new StringContent(expected); - this.Given(x => x.GivenThereIsAServiceRunningOn($"http://localhost:{port}/", "/", port, HttpProtocols.Http2)) + this.Given(x => x.GivenThereIsAServiceUsingHttpsRunningOn($"http://localhost:{port}/", "/", port, HttpProtocols.Http2)) .And(x => _steps.GivenThereIsAConfiguration(configuration)) .And(x => _steps.GivenOcelotIsRunning()) .When(x => _steps.WhenIGetUrlOnTheApiGateway("/", httpContent)) @@ -185,6 +183,7 @@ public void should_return_response_502_when_using_http_one_to_talk_to_server_run .BDDfy(); } + //TODO: does this test make any sense? [Fact] public void should_return_response_200_when_using_http_two_to_talk_to_server_running_http_one_point_one() { @@ -197,7 +196,7 @@ public void should_return_response_200_when_using_http_two_to_talk_to_server_run new() { DownstreamPathTemplate = "/{url}", - DownstreamScheme = "https", + DownstreamScheme = "http", UpstreamPathTemplate = "/{url}", UpstreamHttpMethod = new List { "Get" }, DownstreamHostAndPorts = new List @@ -209,7 +208,7 @@ public void should_return_response_200_when_using_http_two_to_talk_to_server_run }, }, DownstreamHttpMethod = "POST", - DownstreamHttpVersion = "2.0", + DownstreamHttpVersion = "1.1", DangerousAcceptAnyServerCertificateValidator = true }, }, @@ -238,6 +237,17 @@ private void GivenThereIsAServiceRunningOn(string baseUrl, string basePath, int }, port, protocols); } + private void GivenThereIsAServiceUsingHttpsRunningOn(string baseUrl, string basePath, int port, HttpProtocols protocols) + { + _serviceHandler.GivenThereIsAServiceRunningOnUsingHttps(baseUrl, basePath, async context => + { + context.Response.StatusCode = 200; + var reader = new StreamReader(context.Request.Body); + var body = await reader.ReadToEndAsync(); + await context.Response.WriteAsync(body); + }, port, protocols); + } + public void Dispose() { _serviceHandler.Dispose(); diff --git a/test/Ocelot.AcceptanceTests/Ocelot.AcceptanceTests.csproj b/test/Ocelot.AcceptanceTests/Ocelot.AcceptanceTests.csproj index e9fddfee4..e0647b773 100644 --- a/test/Ocelot.AcceptanceTests/Ocelot.AcceptanceTests.csproj +++ b/test/Ocelot.AcceptanceTests/Ocelot.AcceptanceTests.csproj @@ -20,7 +20,7 @@ PreserveNewest - + PreserveNewest diff --git a/test/Ocelot.AcceptanceTests/ServiceHandler.cs b/test/Ocelot.AcceptanceTests/ServiceHandler.cs index f6e0aade6..24fb75196 100644 --- a/test/Ocelot.AcceptanceTests/ServiceHandler.cs +++ b/test/Ocelot.AcceptanceTests/ServiceHandler.cs @@ -4,6 +4,7 @@ using System.IO; using System.Net; using System.Threading.Tasks; + using System.Security.Authentication; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; @@ -11,6 +12,7 @@ using Microsoft.AspNetCore.Server.Kestrel.Core; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Hosting; public class ServiceHandler : IDisposable { @@ -58,7 +60,34 @@ public void GivenThereIsAServiceRunningOn(string baseUrl, string basePath, Reque { serverOptions.Listen(IPAddress.Loopback, port, listenOptions => { - listenOptions.UseHttps("idsrv3test.pfx", "idsrv3test"); + listenOptions.Protocols = protocols; + }); + }) + .UseContentRoot(Directory.GetCurrentDirectory()) + .UseIISIntegration() + .Configure(app => + { + app.UsePathBase(basePath); + app.Run(del); + }) + .Build(); + + _builder.Start(); + } + + public void GivenThereIsAServiceRunningOnUsingHttps(string baseUrl, string basePath, RequestDelegate del, int port, HttpProtocols protocols) + { + _builder = new WebHostBuilder() + .UseUrls(baseUrl) + .UseKestrel() + .ConfigureKestrel(serverOptions => + { + serverOptions.Listen(IPAddress.Loopback, port, listenOptions => + { + listenOptions.UseHttps("mycert.pfx", "password", options => + { + options.SslProtocols = SslProtocols.Tls12; + }); listenOptions.Protocols = protocols; }); }) diff --git a/test/Ocelot.AcceptanceTests/SslTests.cs b/test/Ocelot.AcceptanceTests/SslTests.cs index 7965ebf05..b997be114 100644 --- a/test/Ocelot.AcceptanceTests/SslTests.cs +++ b/test/Ocelot.AcceptanceTests/SslTests.cs @@ -2,14 +2,14 @@ namespace Ocelot.AcceptanceTests { using System; using System.Collections.Generic; - using System.Net; - - using Configuration.File; - - using Microsoft.AspNetCore.Http; - - using TestStack.BDDfy; - + using System.Net; + + using Configuration.File; + + using Microsoft.AspNetCore.Http; + + using TestStack.BDDfy; + using Xunit; public class SslTests : IDisposable @@ -99,7 +99,7 @@ public void should_not_dangerous_accept_any_server_certificate_validator() private void GivenThereIsAServiceRunningOn(string baseUrl, string basePath, int statusCode, string responseBody, int port) { - _serviceHandler.GivenThereIsAServiceRunningOn(baseUrl, basePath, "idsrv3test.pfx", "idsrv3test", port, async context => + _serviceHandler.GivenThereIsAServiceRunningOn(baseUrl, basePath, "mycert.pfx", "password", port, async context => { _downstreamPath = !string.IsNullOrEmpty(context.Request.PathBase.Value) ? context.Request.PathBase.Value : context.Request.Path.Value; diff --git a/test/Ocelot.IntegrationTests/AdministrationTests.cs b/test/Ocelot.IntegrationTests/AdministrationTests.cs index 29a74477a..14667c7dc 100644 --- a/test/Ocelot.IntegrationTests/AdministrationTests.cs +++ b/test/Ocelot.IntegrationTests/AdministrationTests.cs @@ -628,8 +628,8 @@ private void GivenAnotherOcelotIsRunning(string baseUrl) private static void GivenIdentityServerSigningEnvironmentalVariablesAreSet() { - Environment.SetEnvironmentVariable("OCELOT_CERTIFICATE", "idsrv3test.pfx"); - Environment.SetEnvironmentVariable("OCELOT_CERTIFICATE_PASSWORD", "idsrv3test"); + Environment.SetEnvironmentVariable("OCELOT_CERTIFICATE", "mycert.pfx"); + Environment.SetEnvironmentVariable("OCELOT_CERTIFICATE_PASSWORD", "password"); } private void WhenIGetUrlOnTheSecondOcelot(string url) diff --git a/test/Ocelot.IntegrationTests/Ocelot.IntegrationTests.csproj b/test/Ocelot.IntegrationTests/Ocelot.IntegrationTests.csproj index a0b7d5ccf..3148a2bf5 100644 --- a/test/Ocelot.IntegrationTests/Ocelot.IntegrationTests.csproj +++ b/test/Ocelot.IntegrationTests/Ocelot.IntegrationTests.csproj @@ -13,7 +13,7 @@ ..\..\codeanalysis.ruleset - + PreserveNewest diff --git a/test/Ocelot.IntegrationTests/idsrv3test.pfx b/test/Ocelot.IntegrationTests/idsrv3test.pfx deleted file mode 100644 index 0247dea03f0cc23694291f21310f3ae88880e2bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3395 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 V%$88{h~I%@Xjg7x^oQR@_8&Ry9S;Bi diff --git a/test/Ocelot.IntegrationTests/mycert.pfx b/test/Ocelot.IntegrationTests/mycert.pfx new file mode 100644 index 0000000000000000000000000000000000000000..ead06a05dbdbfd40f375331f1dd72093a1bab8bc GIT binary patch literal 2653 zcmY+^c{CJ^8V2wgh8c#j&X9E&duYa1k=@t^3E2se<+JZbw!s){vV{r}MwaY@EJ;On zA@Plhh-_J+vgGQVd+&GeAMbh3d7g8gKYwTfqYVv^7ENFjq-T&K>Jxu31Hr%&0wXJk zz{qqKL(l|J&p#D?2?11p7S+%I0cWrLp9YBLqi6j00uzuP4Ff^mRP{X7l&-0!p@9Hm z37~Lx)HtQ-_O|IzA^h6*w!>>klkr*+*1aY+G)>B=n-UXs=PQqd5Fr^Y~T9asS{O*DROgXNyhtdc&hgHWiJx#rdu~ zYS*$C#f0c?A>=UmPA8vK_N{(+#~)5Nbg&KBT!&r0SJ-z0lNd>~xN)^<===KnG~owZ zA9~D00*M7OynNzsFASDi0j2}z(oZODiyBvmkdK^nx3_PSPgp8vedLzjH z;_M6Us0$U>OSyS9UgXL>5AXYsOG(}tnazl_HnE&HsOplyan?Qw8SplDjM$&;j z{emtBS!~86g^WtAQlk#>n_f%<>DcTss?AFVhTNZ_s}~szns+T#d_S?--oBuxQP+%F zxi}SUO(q+;G(x@r_ywG9dOgx@rBR(_tkKVr_DV%DpZGdVQk29X~f6*-~ zPc6zATg|B}Ik*4Y>VkI64{BjY zQtd20$nobk?ho0-Cl!SqamfK;_7M|XSOy0x(9TG!YM zb-1F_C@-|8+~NI+G~5JxfM}YQojmQ$ zlgo3v7hNisfgkuPDV}i58*=WoebAaj@tDuU)%~uO;#OvNq4{_6*{So-~=w9lG*>;@8?kvk+F)gmRZ zgIZj7jun}**?}xy&6upOMHYMSPv(!UD5@bk7SgYDe1};CKGZ*OEI%AbN#0I|j>mfg z98+@}r&A>HmzN`|xdeJVDtsa^NjC2dIt!A&Q!k9|vO6;PoqJ_%h81{_LwyPgtP zb&Q3~-ZWdR2v0k8fg`7@6_ZvgarXQm|rdAB(g0{epN%ee?B;!HO}G8u)M8MT_RFwGGN7=QNlA4y4K2oa6{m z-KOf>TsYO}eroq_P1WnJr~~KHpxCh3`~v6JaEJ({>AXybAW?|4aq0@$(dmvKA)5~y z@4Z?K_*MkaE#$pdUsNTeDEW}3fHGoR>tsBTd}-g^l0#rV(aBOKAr32 zR@FuP-(SIP`6qo?oPYZk+39+6mU&OEBJ6rbbU#Vj)jr^^FuD^rz9sKy>rY8J zdE51yB|8@Q0C07H+109^+Wi4z`_7COQJsThAFc8WH^_=N3>C#)Gd}Xb>uSJ%HP4X> zk#35I&-S>5J+OFU5n~obMoYs(2LN&Aph#e3D@`$r+;O*|OCJ~+2rvXe - + PreserveNewest diff --git a/test/Ocelot.ManualTest/mycert.pfx b/test/Ocelot.ManualTest/mycert.pfx new file mode 100644 index 0000000000000000000000000000000000000000..ead06a05dbdbfd40f375331f1dd72093a1bab8bc GIT binary patch literal 2653 zcmY+^c{CJ^8V2wgh8c#j&X9E&duYa1k=@t^3E2se<+JZbw!s){vV{r}MwaY@EJ;On zA@Plhh-_J+vgGQVd+&GeAMbh3d7g8gKYwTfqYVv^7ENFjq-T&K>Jxu31Hr%&0wXJk zz{qqKL(l|J&p#D?2?11p7S+%I0cWrLp9YBLqi6j00uzuP4Ff^mRP{X7l&-0!p@9Hm z37~Lx)HtQ-_O|IzA^h6*w!>>klkr*+*1aY+G)>B=n-UXs=PQqd5Fr^Y~T9asS{O*DROgXNyhtdc&hgHWiJx#rdu~ zYS*$C#f0c?A>=UmPA8vK_N{(+#~)5Nbg&KBT!&r0SJ-z0lNd>~xN)^<===KnG~owZ zA9~D00*M7OynNzsFASDi0j2}z(oZODiyBvmkdK^nx3_PSPgp8vedLzjH z;_M6Us0$U>OSyS9UgXL>5AXYsOG(}tnazl_HnE&HsOplyan?Qw8SplDjM$&;j z{emtBS!~86g^WtAQlk#>n_f%<>DcTss?AFVhTNZ_s}~szns+T#d_S?--oBuxQP+%F zxi}SUO(q+;G(x@r_ywG9dOgx@rBR(_tkKVr_DV%DpZGdVQk29X~f6*-~ zPc6zATg|B}Ik*4Y>VkI64{BjY zQtd20$nobk?ho0-Cl!SqamfK;_7M|XSOy0x(9TG!YM zb-1F_C@-|8+~NI+G~5JxfM}YQojmQ$ zlgo3v7hNisfgkuPDV}i58*=WoebAaj@tDuU)%~uO;#OvNq4{_6*{So-~=w9lG*>;@8?kvk+F)gmRZ zgIZj7jun}**?}xy&6upOMHYMSPv(!UD5@bk7SgYDe1};CKGZ*OEI%AbN#0I|j>mfg z98+@}r&A>HmzN`|xdeJVDtsa^NjC2dIt!A&Q!k9|vO6;PoqJ_%h81{_LwyPgtP zb&Q3~-ZWdR2v0k8fg`7@6_ZvgarXQm|rdAB(g0{epN%ee?B;!HO}G8u)M8MT_RFwGGN7=QNlA4y4K2oa6{m z-KOf>TsYO}eroq_P1WnJr~~KHpxCh3`~v6JaEJ({>AXybAW?|4aq0@$(dmvKA)5~y z@4Z?K_*MkaE#$pdUsNTeDEW}3fHGoR>tsBTd}-g^l0#rV(aBOKAr32 zR@FuP-(SIP`6qo?oPYZk+39+6mU&OEBJ6rbbU#Vj)jr^^FuD^rz9sKy>rY8J zdE51yB|8@Q0C07H+109^+Wi4z`_7COQJsThAFc8WH^_=N3>C#)Gd}Xb>uSJ%HP4X> zk#35I&-S>5J+OFU5n~obMoYs(2LN&Aph#e3D@`$r+;O*|OCJ~+2rvXe PreserveNewest - + PreserveNewest diff --git a/test/Ocelot.UnitTests/idsrv3test.pfx b/test/Ocelot.UnitTests/idsrv3test.pfx deleted file mode 100644 index 0247dea03f0cc23694291f21310f3ae88880e2bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3395 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 V%$88{h~I%@Xjg7x^oQR@_8&Ry9S;Bi diff --git a/test/Ocelot.UnitTests/mycert.pfx b/test/Ocelot.UnitTests/mycert.pfx new file mode 100644 index 0000000000000000000000000000000000000000..ead06a05dbdbfd40f375331f1dd72093a1bab8bc GIT binary patch literal 2653 zcmY+^c{CJ^8V2wgh8c#j&X9E&duYa1k=@t^3E2se<+JZbw!s){vV{r}MwaY@EJ;On zA@Plhh-_J+vgGQVd+&GeAMbh3d7g8gKYwTfqYVv^7ENFjq-T&K>Jxu31Hr%&0wXJk zz{qqKL(l|J&p#D?2?11p7S+%I0cWrLp9YBLqi6j00uzuP4Ff^mRP{X7l&-0!p@9Hm z37~Lx)HtQ-_O|IzA^h6*w!>>klkr*+*1aY+G)>B=n-UXs=PQqd5Fr^Y~T9asS{O*DROgXNyhtdc&hgHWiJx#rdu~ zYS*$C#f0c?A>=UmPA8vK_N{(+#~)5Nbg&KBT!&r0SJ-z0lNd>~xN)^<===KnG~owZ zA9~D00*M7OynNzsFASDi0j2}z(oZODiyBvmkdK^nx3_PSPgp8vedLzjH z;_M6Us0$U>OSyS9UgXL>5AXYsOG(}tnazl_HnE&HsOplyan?Qw8SplDjM$&;j z{emtBS!~86g^WtAQlk#>n_f%<>DcTss?AFVhTNZ_s}~szns+T#d_S?--oBuxQP+%F zxi}SUO(q+;G(x@r_ywG9dOgx@rBR(_tkKVr_DV%DpZGdVQk29X~f6*-~ zPc6zATg|B}Ik*4Y>VkI64{BjY zQtd20$nobk?ho0-Cl!SqamfK;_7M|XSOy0x(9TG!YM zb-1F_C@-|8+~NI+G~5JxfM}YQojmQ$ zlgo3v7hNisfgkuPDV}i58*=WoebAaj@tDuU)%~uO;#OvNq4{_6*{So-~=w9lG*>;@8?kvk+F)gmRZ zgIZj7jun}**?}xy&6upOMHYMSPv(!UD5@bk7SgYDe1};CKGZ*OEI%AbN#0I|j>mfg z98+@}r&A>HmzN`|xdeJVDtsa^NjC2dIt!A&Q!k9|vO6;PoqJ_%h81{_LwyPgtP zb&Q3~-ZWdR2v0k8fg`7@6_ZvgarXQm|rdAB(g0{epN%ee?B;!HO}G8u)M8MT_RFwGGN7=QNlA4y4K2oa6{m z-KOf>TsYO}eroq_P1WnJr~~KHpxCh3`~v6JaEJ({>AXybAW?|4aq0@$(dmvKA)5~y z@4Z?K_*MkaE#$pdUsNTeDEW}3fHGoR>tsBTd}-g^l0#rV(aBOKAr32 zR@FuP-(SIP`6qo?oPYZk+39+6mU&OEBJ6rbbU#Vj)jr^^FuD^rz9sKy>rY8J zdE51yB|8@Q0C07H+109^+Wi4z`_7COQJsThAFc8WH^_=N3>C#)Gd}Xb>uSJ%HP4X> zk#35I&-S>5J+OFU5n~obMoYs(2LN&Aph#e3D@`$r+;O*|OCJ~+2rvXe Date: Sat, 22 Apr 2023 20:58:41 +0100 Subject: [PATCH 2/4] how to generate test cert --- docs/building/tests.rst | 11 +++++++++++ test/Ocelot.AcceptanceTests/mycert.pfx | Bin 0 -> 2653 bytes 2 files changed, 11 insertions(+) create mode 100644 test/Ocelot.AcceptanceTests/mycert.pfx diff --git a/docs/building/tests.rst b/docs/building/tests.rst index 368c9556e..c21e91cfd 100644 --- a/docs/building/tests.rst +++ b/docs/building/tests.rst @@ -4,4 +4,15 @@ Tests The tests should all just run and work as part of the build process. You can of course also run them in visual studio. +Create SSL Cert for Testing +^^^^^^^^^^^^^^^^^^^^^^^^^^^ +You can do this via openssl: + +Install openssl package (if you are using Windows, download binaries here). + +Generate private key: `openssl genrsa 2048 > private.pem` + +Generate the self signed certificate: `openssl req -x509 -days 1000 -new -key private.pem -out public.pem` + +If needed, create PFX: `openssl pkcs12 -export -in public.pem -inkey private.pem -out mycert.pfx` \ No newline at end of file diff --git a/test/Ocelot.AcceptanceTests/mycert.pfx b/test/Ocelot.AcceptanceTests/mycert.pfx new file mode 100644 index 0000000000000000000000000000000000000000..ead06a05dbdbfd40f375331f1dd72093a1bab8bc GIT binary patch literal 2653 zcmY+^c{CJ^8V2wgh8c#j&X9E&duYa1k=@t^3E2se<+JZbw!s){vV{r}MwaY@EJ;On zA@Plhh-_J+vgGQVd+&GeAMbh3d7g8gKYwTfqYVv^7ENFjq-T&K>Jxu31Hr%&0wXJk zz{qqKL(l|J&p#D?2?11p7S+%I0cWrLp9YBLqi6j00uzuP4Ff^mRP{X7l&-0!p@9Hm z37~Lx)HtQ-_O|IzA^h6*w!>>klkr*+*1aY+G)>B=n-UXs=PQqd5Fr^Y~T9asS{O*DROgXNyhtdc&hgHWiJx#rdu~ zYS*$C#f0c?A>=UmPA8vK_N{(+#~)5Nbg&KBT!&r0SJ-z0lNd>~xN)^<===KnG~owZ zA9~D00*M7OynNzsFASDi0j2}z(oZODiyBvmkdK^nx3_PSPgp8vedLzjH z;_M6Us0$U>OSyS9UgXL>5AXYsOG(}tnazl_HnE&HsOplyan?Qw8SplDjM$&;j z{emtBS!~86g^WtAQlk#>n_f%<>DcTss?AFVhTNZ_s}~szns+T#d_S?--oBuxQP+%F zxi}SUO(q+;G(x@r_ywG9dOgx@rBR(_tkKVr_DV%DpZGdVQk29X~f6*-~ zPc6zATg|B}Ik*4Y>VkI64{BjY zQtd20$nobk?ho0-Cl!SqamfK;_7M|XSOy0x(9TG!YM zb-1F_C@-|8+~NI+G~5JxfM}YQojmQ$ zlgo3v7hNisfgkuPDV}i58*=WoebAaj@tDuU)%~uO;#OvNq4{_6*{So-~=w9lG*>;@8?kvk+F)gmRZ zgIZj7jun}**?}xy&6upOMHYMSPv(!UD5@bk7SgYDe1};CKGZ*OEI%AbN#0I|j>mfg z98+@}r&A>HmzN`|xdeJVDtsa^NjC2dIt!A&Q!k9|vO6;PoqJ_%h81{_LwyPgtP zb&Q3~-ZWdR2v0k8fg`7@6_ZvgarXQm|rdAB(g0{epN%ee?B;!HO}G8u)M8MT_RFwGGN7=QNlA4y4K2oa6{m z-KOf>TsYO}eroq_P1WnJr~~KHpxCh3`~v6JaEJ({>AXybAW?|4aq0@$(dmvKA)5~y z@4Z?K_*MkaE#$pdUsNTeDEW}3fHGoR>tsBTd}-g^l0#rV(aBOKAr32 zR@FuP-(SIP`6qo?oPYZk+39+6mU&OEBJ6rbbU#Vj)jr^^FuD^rz9sKy>rY8J zdE51yB|8@Q0C07H+109^+Wi4z`_7COQJsThAFc8WH^_=N3>C#)Gd}Xb>uSJ%HP4X> zk#35I&-S>5J+OFU5n~obMoYs(2LN&Aph#e3D@`$r+;O*|OCJ~+2rvXe Date: Sat, 22 Apr 2023 21:20:05 +0100 Subject: [PATCH 3/4] updated build image to include git --- .circleci/config.yml | 4 ++-- docker/Dockerfile.base | 2 +- docker/Dockerfile.build | 2 +- docker/Dockerfile.release | 2 +- docker/build.sh | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ea97acc94..211e2fece 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -4,13 +4,13 @@ orbs: jobs: build: docker: - - image: mijitt0m/ocelot-build:0.0.7 + - image: mijitt0m/ocelot-build:0.0.8 steps: - checkout - run: dotnet tool restore && dotnet cake release: docker: - - image: mijitt0m/ocelot-build:0.0.7 + - image: mijitt0m/ocelot-build:0.0.8 steps: - checkout - run: dotnet tool restore && dotnet cake --target=Release diff --git a/docker/Dockerfile.base b/docker/Dockerfile.base index 8f061a4b9..8862bf0cf 100644 --- a/docker/Dockerfile.base +++ b/docker/Dockerfile.base @@ -1,6 +1,6 @@ FROM mcr.microsoft.com/dotnet/sdk:7.0-alpine -RUN apk add bash icu-libs krb5-libs libgcc libintl libssl1.1 libstdc++ zlib +RUN apk add bash icu-libs krb5-libs libgcc libintl libssl1.1 libstdc++ zlib git RUN curl -L --output ./dotnet-install.sh https://dot.net/v1/dotnet-install.sh diff --git a/docker/Dockerfile.build b/docker/Dockerfile.build index 0bdb28c2a..eeb4060ec 100644 --- a/docker/Dockerfile.build +++ b/docker/Dockerfile.build @@ -1,7 +1,7 @@ # call from ocelot repo root with # docker build --platform linux/arm64 --build-arg OCELOT_COVERALLS_TOKEN=$OCELOT_COVERALLS_TOKEN -f ./docker/Dockerfile.build . # docker build --platform linux/amd64 --build-arg OCELOT_COVERALLS_TOKEN=$OCELOT_COVERALLS_TOKEN -f ./docker/Dockerfile.build . -FROM mijitt0m/ocelot-build:0.0.7 +FROM mijitt0m/ocelot-build:0.0.8 ARG OCELOT_COVERALLS_TOKEN diff --git a/docker/Dockerfile.release b/docker/Dockerfile.release index e9063b6ac..fa56f46bb 100644 --- a/docker/Dockerfile.release +++ b/docker/Dockerfile.release @@ -1,7 +1,7 @@ # call from ocelot repo root with # docker build --platform linux/arm64 --build-arg OCELOT_COVERALLS_TOKEN=$OCELOT_COVERALLS_TOKEN --build-arg OCELOT_GITHUB_API_KEY=$OCELOT_GITHUB_API_KEY --build-arg OCELOT_COVERALLS_TOKEN=$OCELOT_COVERALLS_TOKEN -f ./docker/Dockerfile.build . # docker build --platform linux/amd64 --build-arg OCELOT_COVERALLS_TOKEN=$OCELOT_COVERALLS_TOKEN --build-arg OCELOT_GITHUB_API_KEY=$OCELOT_GITHUB_API_KEY --build-arg OCELOT_COVERALLS_TOKEN=$OCELOT_COVERALLS_TOKEN -f ./docker/Dockerfile.build . -FROM mijitt0m/ocelot-build:0.0.7 +FROM mijitt0m/ocelot-build:0.0.8 ARG OCELOT_COVERALLS_TOKEN ARG OCELOT_NUTGET_API_KEY diff --git a/docker/build.sh b/docker/build.sh index 5baf096f9..6ff36b093 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -1,5 +1,5 @@ # this script build the ocelot docker file -version=0.0.7 +version=0.0.8 docker build --platform linux/amd64 -t mijitt0m/ocelot-build -f Dockerfile.base . echo $DOCKER_PASS | docker login -u $DOCKER_USER --password-stdin docker tag mijitt0m/ocelot-build mijitt0m/ocelot-build:$version From f5242837c9acc5048256419530c01c7017d80e32 Mon Sep 17 00:00:00 2001 From: TomPallister Date: Sat, 22 Apr 2023 21:24:12 +0100 Subject: [PATCH 4/4] updated build image to include openssh-client --- .circleci/config.yml | 4 ++-- docker/Dockerfile.base | 2 +- docker/Dockerfile.build | 2 +- docker/Dockerfile.release | 2 +- docker/build.sh | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 211e2fece..6f36d4b36 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -4,13 +4,13 @@ orbs: jobs: build: docker: - - image: mijitt0m/ocelot-build:0.0.8 + - image: mijitt0m/ocelot-build:0.0.9 steps: - checkout - run: dotnet tool restore && dotnet cake release: docker: - - image: mijitt0m/ocelot-build:0.0.8 + - image: mijitt0m/ocelot-build:0.0.9 steps: - checkout - run: dotnet tool restore && dotnet cake --target=Release diff --git a/docker/Dockerfile.base b/docker/Dockerfile.base index 8862bf0cf..691339490 100644 --- a/docker/Dockerfile.base +++ b/docker/Dockerfile.base @@ -1,6 +1,6 @@ FROM mcr.microsoft.com/dotnet/sdk:7.0-alpine -RUN apk add bash icu-libs krb5-libs libgcc libintl libssl1.1 libstdc++ zlib git +RUN apk add bash icu-libs krb5-libs libgcc libintl libssl1.1 libstdc++ zlib git openssh-client RUN curl -L --output ./dotnet-install.sh https://dot.net/v1/dotnet-install.sh diff --git a/docker/Dockerfile.build b/docker/Dockerfile.build index eeb4060ec..5498c6106 100644 --- a/docker/Dockerfile.build +++ b/docker/Dockerfile.build @@ -1,7 +1,7 @@ # call from ocelot repo root with # docker build --platform linux/arm64 --build-arg OCELOT_COVERALLS_TOKEN=$OCELOT_COVERALLS_TOKEN -f ./docker/Dockerfile.build . # docker build --platform linux/amd64 --build-arg OCELOT_COVERALLS_TOKEN=$OCELOT_COVERALLS_TOKEN -f ./docker/Dockerfile.build . -FROM mijitt0m/ocelot-build:0.0.8 +FROM mijitt0m/ocelot-build:0.0.9 ARG OCELOT_COVERALLS_TOKEN diff --git a/docker/Dockerfile.release b/docker/Dockerfile.release index fa56f46bb..e2659c035 100644 --- a/docker/Dockerfile.release +++ b/docker/Dockerfile.release @@ -1,7 +1,7 @@ # call from ocelot repo root with # docker build --platform linux/arm64 --build-arg OCELOT_COVERALLS_TOKEN=$OCELOT_COVERALLS_TOKEN --build-arg OCELOT_GITHUB_API_KEY=$OCELOT_GITHUB_API_KEY --build-arg OCELOT_COVERALLS_TOKEN=$OCELOT_COVERALLS_TOKEN -f ./docker/Dockerfile.build . # docker build --platform linux/amd64 --build-arg OCELOT_COVERALLS_TOKEN=$OCELOT_COVERALLS_TOKEN --build-arg OCELOT_GITHUB_API_KEY=$OCELOT_GITHUB_API_KEY --build-arg OCELOT_COVERALLS_TOKEN=$OCELOT_COVERALLS_TOKEN -f ./docker/Dockerfile.build . -FROM mijitt0m/ocelot-build:0.0.8 +FROM mijitt0m/ocelot-build:0.0.9 ARG OCELOT_COVERALLS_TOKEN ARG OCELOT_NUTGET_API_KEY diff --git a/docker/build.sh b/docker/build.sh index 6ff36b093..bf2cee9b5 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -1,5 +1,5 @@ # this script build the ocelot docker file -version=0.0.8 +version=0.0.9 docker build --platform linux/amd64 -t mijitt0m/ocelot-build -f Dockerfile.base . echo $DOCKER_PASS | docker login -u $DOCKER_USER --password-stdin docker tag mijitt0m/ocelot-build mijitt0m/ocelot-build:$version