From dbfee1d1e7ec0d0c084e88875f166973c59b39e3 Mon Sep 17 00:00:00 2001 From: Mathias Raacke Date: Fri, 4 Dec 2015 15:54:50 +0100 Subject: [PATCH] bug fixes manual registration now working again --- .vs/ACME.net/v14/.suo | Bin 334336 -> 334336 bytes README.md | 20 +++++++++++ .../Oocx.ACME.CLRConsole.csproj | 3 +- .../ContainerConfiguration.cs | 4 +-- src/Oocx.ACME.Console/Options.cs | 6 ++-- src/Oocx.ACME.Console/Program.cs | 2 +- src/Oocx.ACME.IIS/Oocx.ACME.IIS.xproj | 7 ++-- src/Oocx.ACME/Client/AcmeClient.cs | 32 ++++++++++++++---- .../Client/ManualChallengeProvider.cs | 4 +-- .../ManualServerConfigurationPRovider.cs | 19 +++++++++++ src/Oocx.ACME/Protocol/CertificateResponse.cs | 4 +-- 11 files changed, 80 insertions(+), 21 deletions(-) create mode 100644 src/Oocx.ACME/Client/ManualServerConfigurationPRovider.cs diff --git a/.vs/ACME.net/v14/.suo b/.vs/ACME.net/v14/.suo index d41d029d4b2fdee9a337de73a770c63870e961b5..7bc6b6408ce9160e3131ba9283f78966dee17528 100644 GIT binary patch delta 13120 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 delta 9068 zcmcgy3tW`dwx9LwZ(zUy2jr;;1EL~2IJ|}dA2G~8+CvG+%E%mWR1^W35yc0R9XlPP zQodq!&M8xmO%FX@U-6-JZN&1Jm9NZOT~Cp9JNdXCGV^r1rDyGLhL`W|J-@cUKl|~m zZ|$|#UVH8J?Xh7;Si_F6RmN07JQZPCtSLG`7$46gg%7LgpGvf3C^wdK0?si zI7SJ%8$R$i5+)2nJ+(Sqptd*8(;zn$vmPp7U3@4-zZX=8# zj3h)8b`ZEm(ta^U9YLKW>6B<)rlwXEA%ifKz$K}mnv47`$-bWIdkNDBqXDX={|n_QNwKZ@$ngfWD%zOh`Y zErdK@pVM_gitaO0ZRby<6@BLD_;}CKQUW%RY>{vN>n2$s@=2OP5~K}rG26%L+Mp@v z2caWSS`?WiC9a5(#zwa-oA0yAWU7BdSnTW9P(9n%e!*9Bd5eARBC5Y5C+1_>)XpP3 zLl{QjVL6#aDA0UUpJ{ z7af3==c!+^x?iT!^HlJpg# zl=${xEz;8Pc*09lMWU4W&Izd@nLOd%7-@G%pfoOdlYF5Nw6K1J*fiaxo<@#olj^1~ z7OWHyrWc6==|$;~HA!+gCQ8;(X*`&%94sx;lj}T4-jsIIf4hFeF;K6inVyj9Mh}xV zRMPn9w(zD`VziG7D%I}@X5uR+jfIb)$ykCV0we~kqZif_E^Yr^+X7fWIaq4gM$&JK zg8<-5^Y^Zqw@;Mz3aNgz#G?SV|LE`wb{B!LtyZ71U7ynq>)k?=%LT>KeAhDJHjpm5 z>V=^o)y`kp)N0f4Fdx#zs;`3+N3WA0}9!>fApi<$b2OwXvwvLe-ra%LLS$ZUK z$o8T8K8cTigbcZy@F?LogcXFx2)`w8Ltm2PN5JQBm5?$C*$8-kk2nJlz9){x^&(6~ zj~a%eu9&)I057aR7i+jFe_EB5G|v-+N4DBugw+ih?qCpglV;W4;c8nN@$IlJMe!>} zRN&SF>^@xe3NzuxcbN{4M5+_ebAb6{%mEe*S-l7D(OVSF=}$wN=K-qt*~yP+T5zSH zMJL8d(`J;q!$4@B4%Ptp4|?z=fiHsWnojzW+SZ?OQS$fLLSQT-RfhrSpYg?9~xafA6u z@i!X&hH#p|H{uzp&k|Jh8t+d>`zW~GodQB^IVBqoRSjiBWh$rYpm|tcy639W_jD$1QMN6O2&QEE`Qs2+|V{@c>ojZ*dbsU-dO%>LT zBQu+6t|$UGv#?Wz7stWfy-dJ^&>TVjF%$fRChapCE;Tp3^t@J&Zzh2*h>yHZBP|3O zEfEkYchESrvk82iD+qH5m4qrnHDMm1hTtT)2=fWGgaw3!1gU*NnD!ZJkWxx%p29bW z;``*MvTF)$7}89*Dpv4-cFldm7e!Ieb>+TMEBi*OOQz6I$I93c6S@lFkYpYH@7`(O z;;$;9ZVCm#y&?$G!rOXVSteXlQ;4Y!}qx90+J489L6i%qG%?wUT-@BHt~sF8Qp`*kS^WfSSoryt+XrS4@Uyz+D4=Ej7?6vh)J0{B#AZ23da|+QD57 zf?F$yElXhKKwLRqn4z10yTg@ISW`9IQRceaUTJq51r4_U5lB*-(BUspSJu1+8$xi? zyHM zE+k>fhctM&O}Gp1SR|OSuuga$ryUhSv3;+QhWa|es4$hOtM@~p3i`|a1BI{Ecyf`D zh{kGRHg+5lLglpwglV8?Ag>%L)N0)C3)&W&KynHn3zwMtH3-C`Q-mBj=Y+7&-@Su` zT5lE1viU1ve}KD%y5}dbP}F@u;^=k4Le#G%A*f}>a~}yKaP2G9H3kT?aLr$ZvG}P* zFu7aFZXJS%C;l!}%hf*!s{pt73o&xcPr_H=ULpu?4HLL=+<{EMG;Y}gp)z%=)tKZeK0hKn#(ZVY8EhIymNj2%pP9Cyc( zerx?n7m`McYnf2!Rkw5OE?hHFNN`7ytZ6?Bv2yHB!b!lU&%r1gW7uJao-ZH*t53re zxjKQZQj>PU*z{izgVjS>nmi$e?EqPbVwV87eF=&9%1Ow{6*3?#|P3GBEUmwTW;>Ob>Rj+0$EtdU{iC|c^=Ei`!eFa*lEdCWs{^_+Mc zV2zEH%B42825`f1AgfLzdgE~@z%3s^C9b-SwCAs5#69fvbp@2UfP%Y-uh%t1aThZY zmv0bE-I6eD`;_e7aRB^q>_N!Gj(VDyx-re~gC4*6fR;k{AnVY$3z-HJxX*9i3n{p( zh1_V>UU&}MpAtfw_d-3kH!2MgA8#XqTV#u+AAs4bUQ8QImeKH?gk)L-z~0a;}T*VN%h$!QLmy z&#+hf1`VSFnV-oV3vt~NmWOlJFfICx6vKEcFeF8_kiK_o=;~p%LbXPMap8D)9vgw> zYnXlvf99ae1P5Ibxab@&rxU!IsGT%YMl~PxK3hPPc6wG#ecxG+lQ*!*xOy=giJlGY zQ*huHmCz5jILQ_AbYd({^MiJ*U&a!YuC#V&p1Xnhxtmyo`!Vu>rbk(_octO)9`1ge zy7LaP+i~n}79l^>#{R@wR!c8ZuHX zsRoP9m|@7z%1_NsPtDFtwPY_{;;bnvnOIe}FvViMJ3nRo_({GVJ{$}2*uIMeCzO{v zO9)O!O|7G*tg3QG`ONt>c2{{-WpzzeZTWOZ4X!)JhC^%fezvGj6n(t$dzJpGg9yji z<1y7Wj#@{hYkIk}y2|OG_g&OmP-CyI?tIZp7&*)3BHDTL9ZuI=htp}F>9F%jal)(2 zh{-Xd=)`4#KT_0FXAB%WB0R0oOhUghqryiEcn0?)`z$DgqlqjgVB_cW==O|W|*=v zmcGgvyX41?vqhlEGv%2wmM+=G6=hOE%9)Oy(!lEq=g7JC%K7#Rg~UN5y-oWjzOj?#%MGop0g(PixKEHDwE59q ztv|(v;2*;%GxnTjxtjYAc@t{997cI^Ls1gWI>VySbB4m*<_NVv`iH4=q_)g3TxAut za(p}cJYKRt6^F04k~1pnxEuecl|3O+(wT~uJ!E^bYyj@v$tbICWtlpA4Xp~#NmHwp zX6IX6L{5=0fIlm>I~}gNYKPNHSyMi@+*Mxd@VSbjk3t;Yo4B0ZgAAmQY1}?vel`S# zYA01y%;!$0AMbKJ+ZR&tlSp-+F-7?n8#(UW=}VR@&M?~2Q%zY}25X+xXvj#*&N5iC z^9u~-Y+JT5%bb>O$u=+Txj)=~V$7&tf0L{jO{>c@nv~hjs!9?(+h{T6rCUhwR7?8x zJn5C28Y5$7MOCT2;umrKhBoaAeDW_WH$Br~GG=9%OAXVrOsR$p$BZ&VY1#~=Z>%fX^;>m_$0h}yo!%2^oBH>H>6p;A?-eINV`JJTPKaV5or%G z_w%UJh?_oS;rRJJmW2I2WP|ZPBh``IFr{evn(h#E-!N+g|M>QnAs$~tWxJIK85L2~ zBX;^0gcQr=_SeUkP(tpiDyym}xe?jG8}aZ}i9(1q!;oEIv1F!O()083EK8U0)$2F<7e~y1t~X*74uMznyPtD$ zlb-zsq8_G?>7IqJE&tWX)-(G4s)1MPzjX-O4zbuFH&171feVx+xRun0$Bzhp4d*RG zJx*%yAC+w0lmRJaFzJHFTgv7-tQF;y`w)8*XRpWl<17Mtw3X!!_i<7x?tC@%Z7bSE-$de~pJh82m2#bEj`<_>CjK zUG%w~w~xsO==IN`62OzvpDO2agWGpCwK)Ixh#StG+YO!l4E8xfZ?aIL&swPe-Eu~KzY5FUPq4TuoC=1um*P`i|1^X5LB`9g|I zJ^2-UsngQ2I9eYz< zH^EdKnERQxBzt%;H4$t#&0WL$DWdU|w)>D6zp9*?h1h`B5SyS+fA zggbsp*lwQv%7c6 z6}jXZe0t3lMWN|mVTzX2> zVuBu8an&gnhX2+;dDos(>=OSefqttozC_=g$@MIX-{SKD`nAgJ@B8#bIM1@N;S3vw zW#?I>^63d~>5-w!n#0t&@RbZ_+2wHb?1CtKitb..\..\artifacts\bin\Oocx.ACME.Console\Debug\net46\Oocx.ACME.Console.dll True - + + False ..\..\artifacts\bin\Oocx.ACME.IIS\Debug\net46\Oocx.ACME.IIS.dll diff --git a/src/Oocx.ACME.Console/ContainerConfiguration.cs b/src/Oocx.ACME.Console/ContainerConfiguration.cs index 8f179d5..ff196a3 100644 --- a/src/Oocx.ACME.Console/ContainerConfiguration.cs +++ b/src/Oocx.ACME.Console/ContainerConfiguration.cs @@ -30,7 +30,7 @@ public IContainer Configure(Options options) builder.RegisterType().As().WithParameter("basePath", options.AccountKeyContainerLocation ?? Environment.CurrentDirectory); } - if ("manual".Equals(options.ChallengeProvider, StringComparison.OrdinalIgnoreCase)) + if ("manual-http-01".Equals(options.ChallengeProvider, StringComparison.OrdinalIgnoreCase)) { builder.RegisterType().As(); } @@ -50,7 +50,7 @@ public IContainer Configure(Options options) } else { - builder.RegisterType().As(); + builder.RegisterType().As(); } builder.RegisterType().As(); diff --git a/src/Oocx.ACME.Console/Options.cs b/src/Oocx.ACME.Console/Options.cs index 485bf17..87c3955 100644 --- a/src/Oocx.ACME.Console/Options.cs +++ b/src/Oocx.ACME.Console/Options.cs @@ -20,7 +20,7 @@ public class Options [Option('t', "termsOfServiceUri", HelpText = "The uri of the terms of service that you accept.", Default = "https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf")] public string TermsOfServiceUri { get; set; } - [Option('i', "ignoreSSLErrors", HelpText = "Ignore SSL certificate errors for the HTTPS connection to the ACME server (useful for debugging messages with fiddler)")] + [Option("ignoreSSLErrors", HelpText = "Ignore SSL certificate errors for the HTTPS connection to the ACME server (useful for debugging messages with fiddler)")] public bool IgnoreSSLCertificateErrors { get; set; } [Option('v', "verbosity", HelpText = "Configures the log level (Verbose, Info, Warning, Error, Disabled - casing is important).", Default = LogLevel.Info)] @@ -35,10 +35,10 @@ public class Options [Option('n', "accountKeyName", HelpText = "The name of the key file or key container used to store the acme registration key.", Default = "acme-key")] public string AccountKeyName { get; set; } - [Option('c', "challengeProvider", HelpText = "The type of web server integration to use for ACME challenges. Supported types are: 'manual' (no integration), 'iis-http-01' (IIS with http-01 challenge)", Default = "iis-http-01")] + [Option('c', "challengeProvider", HelpText = "The type of web server integration to use for ACME challenges. Supported types are: 'manual-http-01' (no integration with http-01 challenge), 'iis-http-01' (IIS with http-01 challenge)", Default = "iis-http-01")] public string ChallengeProvider { get; set; } - [Option('s', "serverConfigurationProvider", HelpText = "The type of web server configuration to use to install and configure certificates. Supported types are: 'manual' (no integration), 'iis' (installs certificates to localmachine\\my and configures IIS bindings)", Default = "iis")] + [Option('i', "serverConfigurationProvider", HelpText = "The type of web server configuration to use to install and configure certificates. Supported types are: 'manual' (no integration), 'iis' (installs certificates to localmachine\\my and configures IIS bindings)", Default = "iis")] public string ServerConfigurationProvider { get; set; } [Option('w', "iisWebSite", HelpText = "The IIS web site that should be configured to use the new certificate (used with --serverConfigurationProvider iis). If you do not specifiy a web site, the provider will try to find a matching site with a binding for your domain.")] diff --git a/src/Oocx.ACME.Console/Program.cs b/src/Oocx.ACME.Console/Program.cs index 71294d9..a73db0b 100644 --- a/src/Oocx.ACME.Console/Program.cs +++ b/src/Oocx.ACME.Console/Program.cs @@ -35,7 +35,7 @@ private void Execute(Options options) return; } - var process = container.Resolve(new Parameter[] { new NamedParameter("options", options) }); + var process = container.Resolve(new NamedParameter("options", options)); process.StartAsync().GetAwaiter().GetResult(); } catch (AggregateException ex) diff --git a/src/Oocx.ACME.IIS/Oocx.ACME.IIS.xproj b/src/Oocx.ACME.IIS/Oocx.ACME.IIS.xproj index b5270ed..381fae3 100644 --- a/src/Oocx.ACME.IIS/Oocx.ACME.IIS.xproj +++ b/src/Oocx.ACME.IIS/Oocx.ACME.IIS.xproj @@ -4,7 +4,6 @@ 14.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - cc1c7776-20ec-41a1-ad04-e7e19319b1a9 @@ -12,9 +11,11 @@ ..\..\artifacts\obj\$(MSBuildProjectName) ..\..\artifacts\bin\$(MSBuildProjectName)\ - 2.0 + + True + - + \ No newline at end of file diff --git a/src/Oocx.ACME/Client/AcmeClient.cs b/src/Oocx.ACME/Client/AcmeClient.cs index 0233e03..76fb7c9 100644 --- a/src/Oocx.ACME/Client/AcmeClient.cs +++ b/src/Oocx.ACME/Client/AcmeClient.cs @@ -76,7 +76,12 @@ public async Task RegisterAsync(string termsOfServiceUri, { var location = ex.Response.Headers.Location.ToString(); Info($"using existing registration: {location}"); - return await PostAsync(new Uri(location), new UpdateRegistrationRequest()); + var response = await PostAsync(new Uri(location), new UpdateRegistrationRequest()); + if (string.IsNullOrEmpty(response.Location)) + { + response.Location = location; + } + return response; } } @@ -151,8 +156,7 @@ public async Task NewCertificateRequestAsync(byte[] csr) var request = new CertificateRequest {Csr = csr.Base64UrlEncoded()}; var response = await PostAsync(directory.NewCertificate, request); - Verbose($"location: {response.Location}"); - Verbose($"link: {response.Link}"); + Verbose($"location: {response.Location}"); return response; } @@ -219,14 +223,30 @@ private async Task SendAsync(HttpMethod method, Uri uri, objec private static void GetHeaderValues(HttpResponseMessage response, TResult responseContent) { var properties = - typeof (TResult).GetProperties(BindingFlags.Public | BindingFlags.SetProperty) + typeof (TResult).GetProperties(BindingFlags.Public | BindingFlags.SetProperty | BindingFlags.Instance) .Where(p => p.PropertyType == typeof (string)) .ToDictionary(p => p.Name, p => p); foreach (var header in response.Headers) { - if (properties.ContainsKey(header.Key)) + if (properties.ContainsKey(header.Key) && header.Value.Count() == 1) + { + properties[header.Key].SetValue(responseContent, header.Value.First()); + } + + if (header.Key == "Link") { - properties[header.Key].SetValue(responseContent, header.Value); + foreach (var link in header.Value) + { + var parts = link.Split(';'); + if (parts.Length != 2) + { + continue; + } + if (parts[1] == "rel=\"terms-of-service\"" && properties.ContainsKey("Agreement")) + { + properties["Agreement"].SetValue(responseContent, parts[0].Substring(1, parts[0].Length - 2)); + } + } } } } diff --git a/src/Oocx.ACME/Client/ManualChallengeProvider.cs b/src/Oocx.ACME/Client/ManualChallengeProvider.cs index 29d7089..35a1782 100644 --- a/src/Oocx.ACME/Client/ManualChallengeProvider.cs +++ b/src/Oocx.ACME/Client/ManualChallengeProvider.cs @@ -40,9 +40,9 @@ public async Task AcceptChallengeAsync(string domain, string s return new PendingChallenge() { - Instructions = $"Copy {challengeFile} to https://{domain ?? siteName}/.well-known/acme/{challenge.Token}", + Instructions = $"Copy {challengeFile} to https://{domain ?? siteName}/.well-known/acme-challenge/{challenge.Token}", Complete = () => client.CompleteChallengeAsync(challenge) }; } - } + } } \ No newline at end of file diff --git a/src/Oocx.ACME/Client/ManualServerConfigurationPRovider.cs b/src/Oocx.ACME/Client/ManualServerConfigurationPRovider.cs new file mode 100644 index 0000000..43b3c59 --- /dev/null +++ b/src/Oocx.ACME/Client/ManualServerConfigurationPRovider.cs @@ -0,0 +1,19 @@ +using System; +using System.Security.Cryptography; +using Oocx.ACME.Common; +using Oocx.ACME.Services; + +namespace Oocx.ACME.Client +{ + public class ManualServerConfigurationProvider : IServerConfigurationProvider + { + public byte[] InstallCertificateWithPrivateKey(string certificatePath, string certificateStoreName, RSAParameters privateKey) + { + return null; + } + + public void ConfigureServer(string domain, byte[] certificateHash, string certificateStoreName, string siteName, string binding) + { + } + } +} \ No newline at end of file diff --git a/src/Oocx.ACME/Protocol/CertificateResponse.cs b/src/Oocx.ACME/Protocol/CertificateResponse.cs index f1f3470..c237f74 100644 --- a/src/Oocx.ACME/Protocol/CertificateResponse.cs +++ b/src/Oocx.ACME/Protocol/CertificateResponse.cs @@ -2,9 +2,7 @@ namespace Oocx.ACME.Protocol { public class CertificateResponse { - public string Location { get; set; } - - public string Link { get; set; } + public string Location { get; set; } public byte[] Certificate { get; set; } }