【问题标题】:Question regarding RSA certificates and Oauth关于 RSA 证书和 Oauth 的问题
【发布时间】:2011-03-03 10:04:05
【问题描述】:

我正在为 CodeIgniter 构建一个 Oauth 库,关于在 Oauth 中使用 RSA-SHA1 进行签名签名的简短问题。 Oauth 文档 (http://oauth.net/core/1.0/) 指出:

9.3.1。生成签名

签名基本字符串已签名 使用消费者的 RSA 私钥 根据 [RFC3447](Jonsson, J. 和 B. Kaliski,“公钥密码学 标准 (PKCS) #1:RSA 密码学; 规格版本 2.1,”。) 第 8.2.1 节,其中 K 是 消费者的 RSA 私钥,M 签名基本字符串,S 是 结果签名字节串:

            S = RSASSA-PKCS1-V1_5-SIGN (K, M)

oauth_signature 设置为 S,首先 根据 [RFC2045] 进行 base64 编码(已释放, N. 和 N. Borenstein,“多用途 Internet 邮件扩展 (MIME) 部分 一:网络消息格式 身体”,第 6.8 节,然后 每个参数编码的 URL 编码 (参数编码)。

那么我应该假设用户已经知道他/她的私钥吗?还是我需要从他们的私人证书中提取它?

感谢您的宝贵时间。

【问题讨论】:

    标签: php oauth rsa


    【解决方案1】:

    没有“私人证书”之类的东西。根据定义,证书始终是公开的。

    证书具体包含一个身份(基本上是某物或某人的名字)和一个公钥。公钥可用于验证使用相应私钥生成的签名。私钥不在证书中。

    不幸的是,一些广泛传播的“文档”称“证书”(或“数字身份”甚至“私人证书”)将证书相应的私人证书组合到一个单一的档案中钥匙。此类档案通常遵循 PKCS#12 文件格式(通常称为“P12”),在 Microsoft 世界中称为“PFX”。 (在实践中使用密码学的大部分复杂性在于涉及到多层使用草率的术语;同样,OAuth 本身将 HMAC/SHA-1 称为“签名”,这是不恰当的。)

    OAuth 文档在第 9.3 节中说:

    RSA-SHA1 签名方法使用 [RFC3447] 第 8.2 节中定义的 RSASSA-PKCS1-v1_5 签名算法(更简单地称为 PKCS#1),使用 SHA-1 作为 EMSA-PKCS1-v1_5 的哈希函数.假设消费者已经以一种经过验证的方式向服务提供者提供了它的 RSA 公钥,这种方式超出了本规范的范围。

    这意味着:

    • 消费者有权访问 RSA 私钥
    • 服务提供商“以经过验证的方式”知道相应的公钥

    以及如何完成这些事情超出了 OAuth 规范的范围。据推测,在某个时候,消费者向服务提供者展示了他的公钥,可能作为证书的一部分(服务提供者根据X.509 规则对其进行了正式验证),或者通过其他确保“验证”的方式。关键是,使用私钥计算的签名是一个令人信服的证据,证明它是由控制与服务提供者知道的公钥对应的私钥的人在相同的签名数据上计算的;服务提供者仍必须确保公钥确实属于它认为属于的人。证书是一种通用且复杂的方法。

    【讨论】:

    • 非常感谢,这解决了我对证书的很多疑问。
    猜你喜欢
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    相关资源
    最近更新 更多