首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用.p12文件发送签名并使用节点加密进行验证

使用.p12文件发送签名并使用节点加密进行验证
EN

Stack Overflow用户
提问于 2018-04-13 18:53:28
回答 1查看 1.6K关注 0票数 0

我正在尝试验证来自IOS应用程序对API的调用。我为后端生成了密钥,如下所示:

代码语言:javascript
复制
openssl genrsa -aes256\
-passout pass:pass\
-out signature_private_key.pem 2048

openssl rsa \
-in signature_private_key.pem\
-passin pass:pass\
-out signature_public_key.pem\
-outform PEM\
-pubout

在节点后端,我正在验证调用,如下所示:

代码语言:javascript
复制
static createSignatureString(bodyString, apiKey, timestamp) {
  const bodyHash = crypto
  .createHash("sha256")
  .update(bodyString)
  .digest("base64");
  return `${bodyHash}:${apiKey}:${timestamp}`;
}

static createSignature(string, privateKey) {
    const sign = crypto.createSign("RSA-SHA256");
    sign.write(string);
    sign.end();
    return sign.sign(privateKey, "base64");
}

static verifySignature(xMessageSignatureString, signature, publicKey) {
    const verify = crypto.createVerify("RSA-SHA256");
    verify.update(xMessageSignatureString);
    verify.end();
    return verify.verify(publicKey, new Buffer(signature, "base64"));
}

这个移动应用程序使用一个.p12文件生成一个签名并发送到rest。鉴于以上所述,我将如何使用openssl生成一个发送有效签名的.p12文件?

EN

回答 1

Stack Overflow用户

发布于 2018-04-13 20:13:19

要创建一个PKCS12文件,您需要私钥(已经拥有)和an (X.509)证书,其中包含匹配的公钥,或者如果适用的话,需要一系列证书,从匹配的证书开始,称为‘链’。您可以从CA获得此证书/链,或者OpenSSL可以创建一个自签名证书,该证书不使用链,许多应用程序都可以接受,但不是全部:

代码语言:javascript
复制
 openssl req -new -x509 -key privatekeyfile -out certfile [-days N] [-$hash] 

-days N指定您希望证书有效的时间;对于虚拟证书,通常在大约10年或更长的时间内选择3650这样的大值,不过如果需要的话,将来也可以很容易地生成替换值。不超过2037年是最安全的,因为一些C程序虽然比过去少,但仍然受到Y2038错误的影响。您可以指定在自签名中使用的散列;这并不重要,但有些人倾向于避免默认(SHA1),而使用例如-sha256。如果您希望使用-subj,可以在命令行上指定“subject”名称;请参见手册页。还有许多扩展可以放在X.509证书中,但是您是否需要它们中的任何一个,如果需要,哪些扩展和值会根据使用它的应用程序的不同而变化。

一旦您在文件中获得了证书和私钥:

代码语言:javascript
复制
 openssl pkcs12 -export -in certfile -inkey privatekeyfile -out p12file 

在这两个命令上,您都可以在命令行上指定密码,就像您在发布的命令中所做的那样,如果您愿意,可以查看手册页和/或使用消息。请记住,这种做法使您的密码对其他进程暂时可见,如果在共享系统上,则通常包括其他用户。

为了清楚起见:在CA颁发的证书上,签名散列确实很重要,不应该是SHA1或更弱,但是在根证书或自签名证书上,它通常并不重要。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49823498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档