crypto API を使用して署名し、オープン SSL を使用して署名を検証する Web サーバーに送信しています。署名は Windows 暗号 API を使用して正常に検証されますが、サーバー エンドからオープン SSL を使用して検証中にエラーが発生します。
エラー:
ECDsa 署名は有効な DER シーケンスではありません
署名機能:
public async sign(data: Uint8Array): Promise<any> {
if (!this.privateKey) {
throw new Error('no private key available for signing');
}
return window.crypto.subtle.sign(
this.getKeyParams(),
this.privateKey,
data,
);
}
private getKeyParams(): EcdsaParams {
return { name: 'ECDSA', hash: coseEllipticCurveNames[ECDSA.ellipticCurveKeys[this.algorithm]] };
}
private async toCOSE(key: CryptoKey): Promise<Map<number, any>> {
const exportedKey = await window.crypto.subtle.exportKey('jwk', key);
const attData = new Map();
attData.set(1, 2); // EC2 key type
attData.set(3, this.algorithm);
attData.set(-1, ECDSA.ellipticCurveKeys[this.algorithm]);
attData.set(-2, base64ToByteArray(exportedKey.x, true));
attData.set(-3, base64ToByteArray(exportedKey.y, true));
return attData;
}