Czy komuś udało się podpiąć do e-recepty? Ciągle dostaję błąd:
Could not establish secure channel for SSL/TLS with authority 'isus.ezdrowie.gov.pl'.
Mój kod:
var certificate = getCert();
var certificate2 = getCert();
var binding = new CustomBinding();
var security = (AsymmetricSecurityBindingElement)SecurityBindingElement.CreateMutualCertificateDuplexBindingElement(MessageSecurityVersion.WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10);
security.EndpointSupportingTokenParameters.Signed.Add(new X509SecurityTokenParameters
{
InclusionMode = SecurityTokenInclusionMode.Never,
ReferenceStyle = SecurityTokenReferenceStyle.Internal,
});
security.RecipientTokenParameters.InclusionMode = SecurityTokenInclusionMode.Never;
security.RecipientTokenParameters.ReferenceStyle = SecurityTokenReferenceStyle.Internal;
security.MessageSecurityVersion =
MessageSecurityVersion.
WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10;
security.IncludeTimestamp = false;
security.MessageProtectionOrder = System.ServiceModel.Security.MessageProtectionOrder.SignBeforeEncrypt;
security.RequireSignatureConfirmation = true;
security.SecurityHeaderLayout = SecurityHeaderLayout.Lax;
security.AllowSerializedSigningTokenOnReply = true;
binding.Elements.Add(security);
binding.Elements.Add(new TextMessageEncodingBindingElement(MessageVersion.Soap11, Encoding.UTF8));
binding.Elements.Add(new HttpsTransportBindingElement());
var client = new ObslugaReceptyWSClient(binding, new EndpointAddress(new Uri("https://isus.ezdrowie.gov.pl/services/ObslugaReceptyWS"), new DnsEndpointIdentity("xxxxxx"), new AddressHeaderCollection()));
client.ClientCredentials.ServiceCertificate.DefaultCertificate = certificate;
client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode =
System.ServiceModel.Security.X509CertificateValidationMode.None;
client.ClientCredentials.ClientCertificate.Certificate = certificate;
client.Endpoint.Contract.ProtectionLevel = System.Net.Security.ProtectionLevel.Sign;
try
{
client.Open();
KontekstMT kontekst = new KontekstMT();
AtrybutMT atr = new AtrybutMT();
kontekst.atrybut = new AtrybutMT[1];
kontekst.atrybut[0] = atr;
OdczytReceptyRequest rq = new OdczytReceptyRequest();
KluczReceptyMT klucz = new KluczReceptyMT();
klucz.kluczRecepty = "abababa";
rq.kluczRecepty = klucz;
ClassLibrary1.ServiceReference1.OdczytReceptyResponse resp = client.odczytRecepty(kontekst, rq);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
W dokumentacji integracji jest informacja taka:
W komunikacji z systemem P1 wymagane jest użycie rozszerzenia Web Services Security i profilu Web Services Security X.509 Certificate Token Profile. Podpisem powinno być objęte całe ciało komunikatu (element soap:Body). W nagłówku SOAP wymagany jest element WS-Security Signature. Informacja o certyfikacie, który służy do weryfikacji podpisu powinna być umieszczona jako BinarySecurityToken z następującymi parametrami:
• EncodingType=”http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary”
• ValueType=”http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3”