【发布时间】:2019-07-16 16:29:32
【问题描述】:
我到处寻找 QSealC 签名消息的示例,但找不到任何信息。 我需要验证 QsealC 签名的有效负载的签名,并且我需要对响应的有效负载进行签名,但我知道有效负载都在 json 中,
有没有 QSealC 签名有效载荷的示例?
谢谢
【问题讨论】:
我到处寻找 QSealC 签名消息的示例,但找不到任何信息。 我需要验证 QsealC 签名的有效负载的签名,并且我需要对响应的有效负载进行签名,但我知道有效负载都在 json 中,
有没有 QSealC 签名有效载荷的示例?
谢谢
【问题讨论】:
您将按照 IETF 的 draft-cavage-http-signatures 详细说明进行签名和验证,其中您应特别注意用于构造的部分 4.1.1 和用于验证 Signature 标头的部分 2.5。
Berlin Group's XS2A NextGenPSD2 Framework Implementation Guidelines 和Stet(法国)都引用了此草稿。但是,请注意,每个独特的实现都对 HTTP 消息签名标准施加额外的要求是正常的,例如通过要求对特定标头进行签名或使用特殊格式的 keyId。我不确定Open Banking(英国)等其他标准化是否引用它。
请注意,您不需要实际的 QsealC PSD2 证书来开始您的签名或验证过程的实施工作,因为您可以创建自己的自行颁发的证书,例如使用 OpenSSL,通过添加在 ETSI TS 119 495 中描述的 ASN.1 配置文件中找到的 OID。
但是,我强烈建议您在您所在地区找到一个 QTSP,并订购用于开发和测试的证书,并在时机成熟时用于生产。
我不会详细介绍创建签名本身的实际过程,因为它在draft-cavage-http-signatures 中非常详细,但请考虑以下示例;
您正在请求GET https://api.bank.eu/v1/accounts,在处理您的传出请求后,您最终会得到以下签名字符串;
date: Sun, 12 May 2019 17:03:04 GMT
x-request-id: 69df69c1-76d0-4590-8f28-50449a21d0d8
psu-id: 289da2e6-5a01-430d-8075-8f7af71f6d2b
tpp-redirect-uri: https://httpbin.org/get
生成的Signature 可能看起来像这样;
keyId=\"SN=D9EA5432EA92D254,CA=CN=Buypass Class 3 CA 3,O=Buypass AS-983163327,C=NO\",
algorithm=\"rsa-sha256\",
headers=\"date x-request-id psu-id tpp-redirect-uri\",
signature=\"base64(rsa-sha256(signing_string))\"
上述签名符合柏林集团在其实施指南(根据 v1.3)第 12.2 节中详述的要求,除了为可读性添加了一些换行符,简而言之是 ;
keyId 必须格式化为 SN={serial},CA={issuer},但请注意,似乎由 ASPSP 来决定如何格式化序列号和颁发者。但是,大多数可能要求序列号采用大写十六进制表示和发行者格式,以符合 RFC 2253 或 RFC 4514。
使用的算法必须是rsa-sha256或rsa-sha512
以下 headers 必须是签名字符串的一部分(如果存在于请求中); date、digest、x-request-id、psu-id、psu-corporate-id、tpp-redirect-uri
签名必须是 base-64 编码
由于开发人员刚刚开始采用这种签署消息的方式,您可能会自己实现这一点 - 但如果您仔细阅读上述草稿,这并不难。
但是,供应商已开始支持该计划,例如Apache CXF 目前在其cxf-rt-rs-security-http-signature 模块中支持 v3.3.0 的签名和验证,如Apache CXF 3.3 Migration Guide 中所述。当然,其他人也会效仿。
验证实际签名很容易,但验证实际 QsealC PSD2 证书有点麻烦,但您可能必须与欧盟的 List of Trusted Lists 集成以检索用于颁发这些证书的根证书和中间证书,并与例如一起形成信任链Java 的 cacerts 和 Microsoft Trusted Root Certificate Program。我个人在实际验证过程中使用difi-certvalidator (Java) 有很好的经验,因为事实证明它很容易扩展到我们的需求,但肯定还有许多其他好的工具和库。
您还需要特别注意证书的organizationIdentifier (OID: 2.5.4.97) 和qcStatements (OID: 1.3.6.1.5.5.7.1.3)。您应该对照Preta 目录检查证书的组织标识符,因为可能存在 TPP 的授权被其 NCA 撤销但 CRL 撤销尚未由其 QTSP 发布的情况。
免责声明:对于整个 QsealC PSD2 证书签名和验证过程,我发现 Berlin Group 和 EBA 都非常分散,有几个方面有待解释。
这是一个粗略的解释,但希望它能给您足够的入门知识。
【讨论】:
Guideline 6: Design and testing to satisfaction of PSPs。他们非常明确地指出,即使是正在申请这些所需授权的实体也必须能够测试您的接口。以我的非法律背景,我会争辩说,这为 ASPSP 在其沙箱中支持 QsealC PSD2 测试证书打开了大门。
Guidelines on the conditions to benefit from an exemption from the contingency mechanism under Article 33(6) of Regulation (EU) 2018/389 (RTS on SCA & CSC) 的第 21 页,由 EBA 于 2018 年 12 月 4 日发布。您可以在 eba.europa.eu/documents/10180/2250578/… 查看文档