PSD2 QSealC 签名消息

PSD2 QSealC signed message

我到处寻找 QSealC 签名邮件的示例,但找不到任何信息。 我需要验证 QsealC 签名有效载荷的签名,我需要签署响应有效载荷,但我知道有效载荷都在 json、

是否有 QSealC 签名有效负载的示例?

谢谢

您将按照 IETF draft-cavage-http-signatures 的详细说明进行签名和验证,其中您应该特别注意用于构建的 4.1.1 部分和用于验证 [=] 的 2.5 部分14=] header.

此草案被Berlin Group's XS2A NextGenPSD2 Framework Implementation Guidelines and Stet (France). However, note that it's normal that each unique implementation imposes additional requirements on the HTTP Message Signing standard, e.g. by requiring specific headers to be signed or using a specially formatted keyId. I am not sure whether other standardization's such as Open Banking(英国)引用。

请注意,您不需要实际的 QsealC PSD2 证书来开始您的签名或验证过程的实施工作,因为您可以创建自己的 self-issued 证书,例如使用 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 节中详述的要求,除了为提高可读性而添加的一些换行符外,简而言之是 ;

  1. keyId的格式必须是SN={serial},CA={issuer},但是注意好像要由ASPSP来决定serial和issuer如何被格式化。但是,大多数可能要求序列号采用大写十六进制表示形式,并且发行者格式符合 RFC 2253 或 RFC 4514。

  2. 使用的算法必须是rsa-sha256rsa-sha512

  3. 以下 headers 如果出现在请求中,则必须是签名字符串的一部分; datedigestx-request-idpsu-idpsu-corporate-idtpp-redirect-uri

  4. 签名必须是 base-64 编码

由于开发人员刚刚开始采用这种消息签名方式,您很可能已经自己实现了这一点 - 但如果您仔细阅读上述草案,这并不难。

但是,供应商已经开始支持该方案,例如如 Apache CXF 3.3 Migration Guide 中所述,Apache CXF 目前在其 cxf-rt-rs-security-http-signature 模块中支持 v3.3.0 的签名和验证。当然,其他人也会效仿。

验证实际签名很容易,但验证实际 QsealC PSD2 证书有点麻烦,但您可能必须与欧盟的 List of Trusted Lists to retrieve root- and intermediate certificates used to issued these certificates, and form a chain of trust together with e.g. Java's cacerts and Microsoft Trusted Root Certificate Program. I personally have good experiences using difi-certvalidator (Java) 集成实际的验证过程,事实证明它很容易扩展到我们的需求,但肯定还有许多其他好的工具和库。

您还需要特别注意证书的 organizationIdentifier (OID: 2.5.4.97)qcStatements (OID: 1.3.6.1.5.5.7.1.3)。您应该根据 Preta 目录检查证书的 organizationIdentifier,因为可能存在 TPP 的授权被其 NCA 撤销的情况,但其 QTSP 尚未发布 CRL 撤销。

免责声明:关于整个 QsealC PSD2 证书签名和验证过程,我发现 Berlin Group 和 EBA 都非常分散,有几个方面有待解释。

这是一个粗略的解释,但希望它足以让您入门。