public AcmeRegistration Register(string[] contacts) { AssertInit(); var requMsg = new NewRegRequest { Contact = contacts, }; var resp = RequestHttpPost(new Uri(RootUrl, Directory[AcmeServerDirectory.RES_NEW_REG]), requMsg); // HTTP 409 (Conflict) response for a previously registered pub key // Location: still had the regUri if (resp.IsError) { if (resp.StatusCode == HttpStatusCode.Conflict) throw new AcmeWebException(resp.Error as WebException, "Conflict due to previously registered public key", resp); else if (resp.IsError) throw new AcmeWebException(resp.Error as WebException, "Unexpected error", resp); } var regUri = resp.Headers[AcmeProtocol.HEADER_LOCATION]; if (string.IsNullOrEmpty(regUri)) throw new AcmeException("server did not provide a registration URI in the response"); var respMsg = JsonConvert.DeserializeObject<RegResponse>(resp.ContentAsString); var newReg = new AcmeRegistration { PublicKey = Signer.ExportJwk(), RegistrationUri = regUri, Contacts = respMsg.Contact, Links = resp.Links, /// Extracts the "Terms of Service" related link header if there is one and /// returns the URI associated with it. Otherwise returns <c>null</c>. TosLinkUri = resp.Links[AcmeProtocol.LINK_HEADER_REL_TOS].FirstOrDefault(), AuthorizationsUri = respMsg.Authorizations, CertificatesUri = respMsg.Certificates, TosAgreementUri = respMsg.Agreement, }; Registration = newReg; return Registration; }