Внедрение 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 вопроса:
Я получил следующую информацию:
*** Информационный старт
Нажмите на ссылку WSDL: https://ws.conf.ebs.health.gov.on.ca:1440/HCVService/HCValidationService?wsdl
Нажмите на значок отчета о безопасности рядом с адресной строкой.
Нажмите Просмотр сертификатов
Установить сертификаты
Вам необходимо получить свой СОБСТВЕННЫЙ сертификат безопасности. Для модели 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.