【问题标题】:How can I convert PKCS8 to JWK format given the openssl commands below给定下面的 openssl 命令,如何将 PKCS8 转换为 JWK 格式
【发布时间】:2020-07-13 20:39:57
【问题描述】:

如何根据下面的 openssl 命令将 PKCS8 转换为 JWK 格式?

openssl genrsa -des3 -passout pass:foobar -out private_key_des3_with_password.pem 2048
openssl pkcs8 -topk8 -inform PEM -in private_key_des3_with_password.pem -outform PEM -out private_key_des3_with_password_pkcs8.pem -passin pass:foobar -passout pass:foobar
openssl rsa -in private_key_des3_with_password.pem -passin pass:foobar -outform PEM -pubout -out public_key_for_pk_des3_with_password.pem

在将 PKCS8 密钥转换为 JWK 格式方面寻求帮助,以便我可以通过“CertificatesAndKeysManagement”将密钥上传到 Salesforce。

Salesforce 需要 JWK 来上传密钥,并将用于加密 JWT。 我还找到了 article 将 PKCS12 转换为 JWT,但不知道如何弥补 PKCS8 -> PKCS12 或 PKCS8 -> JWK 之间的差距。寻找任一解决方案。

Salesforce 代码如下所示:

        Map<String, String> claims = new Map<String, String>{
            'claim'=> 'myClaims'
        };
        Auth.JWT jw = new Auth.JWT();
        jw.setAdditionalClaims(claims);
        jw.setValidityLength(60);
        Auth.JWS sig = new Auth.JWS(jw, 'mykey');
        return sig.getCompactSerialization();

将验证声明的库需要 PKCS8 格式,但 Salesforce 需要 JWK 格式来加密

【问题讨论】:

    标签: openssl jwk


    【解决方案1】:

    我能够完成任务。

    1. 生成证书并作为 JWT 导入 Salesforce。正确的article
    2. 查看此article 以将 PKCS12 转换为 PKCS8

    我们有以下命令

    openssl req -newkey rsa:2048 -nodes -keyout private_key.pem -x509 -days 365 -out certificate.pem
    openssl x509 -outform der -in certificate.pem -out public_key.der
    openssl x509 -in certificate.pem -pubkey > public_key.pem
    keytool -importcert -file certificate.pem -keystore keystore.jks -alias mycertificate -storetype jks
    openssl pkcs12 -inkey private_key.pem -in certificate.pem -export -out keystore.p12 -name mykey
    keytool -importkeystore -destkeystore keystore.jks -srckeystore keystore.p12 -srcstoretype pkcs12 -destalias mykey -srcalias mykey
    openssl pkcs12 -in keystore.p12 -nocerts -out certificatename.pem
    openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
    openssl rsa -in certificatename.pk8 -passin pass:your_password -outform PEM -pubout -out public_key_for_pk_aes256_with_password.pem
    

    将 keystore.jks 上传到 Salesforce。 将公钥提供给其他团队(public_key_for_pk_aes256_with_password.pem)

    【讨论】:

    • 您根本没有导入“as JWT”或“as JWK”;正如您的新链接所说,您正在创建和导入 JKS,这是完全不同的。 (尽管它随后被 for JWT 使用。)而且你的过程比必要的复杂大约 3 倍。并且publickey文件没有用任何密码加密,不能加密; PKCS8 私钥可能 是,但您的不是因为您指定了-nocrypt。由于您的实际问题与您提出的 Q 无关,因此我看不出这对其他人有何用处。
    猜你喜欢
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 2019-08-23
    相关资源
    最近更新 更多