Внедрение WSSecurity с сертификатом X509 npm "Мыло"

часть 1 вопроса:

Используя мыло npm, я пытаюсь сделать мыльный вызов для указанной ниже конечной точки. var url,

var sslRootCAs = require('ssl-root-cas/latest')
sslRootCAs.inject();


var soap = require('soap');
  var url = 'https://ws.conf.ebs.health.gov.on.ca:1440/HCVService/HCValidationService?wsdl';
  var args = {name: 'value'};
  soap.createClient(url, function(err, client) {
      if (err) {
        console.log(err);
      }
      else console.log(client);
  });

Я получаю сообщение об ошибке, как:

{ [Error: unable to verify the first certificate] code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE' }

Что выше ошибка происходит, хотя у меня есть сертификаты.

Часть 2 вопроса:

Я получил следующую информацию:

*** Информационный старт

  1. Нажмите на ссылку WSDL: https://ws.conf.ebs.health.gov.on.ca:1440/HCVService/HCValidationService?wsdl

  2. Нажмите на значок отчета о безопасности рядом с адресной строкой.

  3. Нажмите Просмотр сертификатов

  4. Установить сертификаты

Вам необходимо получить свой СОБСТВЕННЫЙ сертификат безопасности. Для модели IDP МЗ примет самоподписанный сертификат или сертификат, выданный центром сертификации.

а) Вы подпишете запрос о ВГС с закрытым ключом вашего сертификата;

б) мы получим запрос и обработаем его;

c) мы отправим ответ, подписанный секретным ключом нашего сертификата (go-pki_cacert.arm). Вот почему вы должны иметь сертификат go-pki_cacert.arm в вашем хранилище доверенных сертификатов (плюс два других, которые были упомянуты в предыдущих письмах).

d) Секретный ключ в ответе будет зашифрован с использованием открытого ключа, полученного из вашего сертификата, который вы отправили вместе с запросом. Итак, ваш соответствующий частный

ключ должен быть использован для его расшифровки. Все биты открытого ключа используются. Затем вы можете расшифровать содержимое тела / сообщения, используя предоставленный секретный ключ.

Информация Конец ***

У меня есть все предоставленные учетные данные, некоторые образцы запросов также будут отправлены.

Ниже приведен пример XML-запроса:

<soapenv:Envelope xmlns:ebs="http://ebs.health.ontario.ca/" xmlns:hcv="http://hcv.health.ontario.ca/" xmlns:idp="http://idp.ebs.health.ontario.ca/" xmlns:msa="http://msa.ebs.health.ontario.ca/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header><wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
   <wsse:BinarySecurityToken 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" wsu:Id="X509-FF9156B4BEE23716A1142978895556413">MIIGQzC..truncated..CPo=</wsse:BinarySecurityToken>
   <ds:Signature Id="SIG-30" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><ec:InclusiveNamespaces PrefixList="ebs hcv idp msa soapenv" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:CanonicalizationMethod><ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><ds:Reference URI="#UsernameToken-26"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><ec:InclusiveNamespaces PrefixList="ebs hcv idp msa soapenv" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transform></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>nuqM1lGK6rOVruau3woc66AsvIs=</ds:DigestValue></ds:Reference><ds:Reference URI="#TS-25"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><ec:InclusiveNamespaces PrefixList="wsse ebs hcv idp msa soapenv" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transform></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>YHFurnR786jGnU0dmhB6AuZMWf0=</ds:DigestValue></ds:Reference><ds:Reference URI="#id-27"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><ec:InclusiveNamespaces PrefixList="hcv idp msa soapenv" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transform></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>4HrW5GODU3lE87D24YfwxjGwgCo=</ds:DigestValue></ds:Reference><ds:Reference URI="#id-28"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><ec:InclusiveNamespaces PrefixList="ebs hcv msa soapenv" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transform></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
   <ds:DigestValue>mfmdQegqmjMNvXyV0FYGiJwqrwc=</ds:DigestValue></ds:Reference><ds:Reference URI="#id-29">
   <ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><ec:InclusiveNamespaces PrefixList="ebs hcv idp msa" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transform></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>HiE8JaUo37dckfkchYYve9S6LuQ=</ds:DigestValue></ds:Reference></ds:SignedInfo>
   <ds:SignatureValue>tAb..truncated..Q==</ds:SignatureValue>
   <ds:KeyInfo Id="KI-FF9156B4BEE23716A1142978895556414"><wsse:SecurityTokenReference wsu:Id="STR-FF9156B4BEE23716A1142978895556415">
<wsse:Reference URI="#X509-FF9156B4BEE23716A1142978895556413" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
</wsse:SecurityTokenReference></ds:KeyInfo></ds:Signature>
<wsse:UsernameToken wsu:Id="UsernameToken-26">
<wsse:Username>confsu141@gmail.com</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Your_Password</wsse:Password></wsse:UsernameToken>
<wsu:Timestamp wsu:Id="TS-25"><wsu:Created>2015-04-23T11:35:55Z</wsu:Created>
<wsu:Expires>2015-04-23T11:45:55Z</wsu:Expires></wsu:Timestamp></wsse:Security>
      <idp:IDP wsu:Id="id-28" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
         <ServiceUserMUID>011210</ServiceUserMUID>
      </idp:IDP>
      <ebs:EBS wsu:Id="id-27" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
         <SoftwareConformanceKey>b832708a-52a7-45bc-a221-7930267617db</SoftwareConformanceKey>
         <AuditId>Your_UniqueAuditID</AuditId>
      </ebs:EBS>
  </soapenv:Header>
   <soapenv:Body wsu:Id="id-29" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
      <hcv:validate>
         <requests>
           <hcvRequest>
               <healthNumber>1216070563</healthNumber>
               <versionCode>ML</versionCode>
               <feeServiceCodes>A110</feeServiceCodes>                 
               </hcvRequest>  
           </requests>
         <locale>en</locale>
      </hcv:validate>
   </soapenv:Body>
</soapenv:Envelope>

Как мы реализуем это, используя Node.js? Я прочитал SOAP WS-security, но понятия не имею!!! добиться в node.js.

1 ответ

Установка сертификата не помогает, поскольку она просто сохраняет сертификат в надежном хранилище вашей ОС, но ваша программа-нод не читает из него, поэтому вам нужен модуль ssl-root-cas, чтобы встроить надежное хранилище в память, чтобы вы Программа может читать с. Для общего запроса https, вы захотите использовать require('ssl-root-cas/latest').inject() чтобы загрузить все сертификаты, которые будут иметь доверенное хранилище, но поскольку вашей конечной точке требуются определенные сертификаты, вы захотите добавить их вручную:

require('ssl-root-cas')
  .addFile('[phyical path to root cert]')
  .addFile('[phyical path to chain cert]')
  .addFile('[phyical path to signing cert]'); //This one you don't need to read its wsdl.
Другие вопросы по тегам