我正在为CodeIgniter构建一个Oauth库,这是关于在Oauth中使用RSA-SHA1进行签名签名的简短问题。 Oauth文档(http://oauth.net/core/1.0/)声明:
9.3.1。生成签名
Signature Base String已签名 使用Consumer的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. base64-encoded per [RFC2045](Freed, N.和N. Borenstein,“多用途 Internet邮件扩展(MIME)部分 一:互联网信息的格式 机构,“。)第6.8节,然后 每个参数编码的URL编码 (参数编码)。
那么我应该假设用户已经知道他/她的私钥吗?或者我是否需要从私人证书中提取它?
感谢您的时间。
答案 0 :(得分:3)
没有“私人证书”这样的东西。根据定义,证书始终是公开的。
证书专门包含身份(基本上是某事物或某人的名称)和公钥。公钥可用于验证使用相应的私钥生成的签名。证书中的私钥不。
不幸的是,一些广泛传播的“文档”将“证书”(或“数字身份”甚至“私人证书”)称为证书和的相应私有“组合”到单个存档中键。此类存档通常遵循PKCS#12文件格式(通常称为“P12”),在Microsoft世界中称为“PFX”。 (在实践中使用密码术的大多数复杂性都是涉及多层粗俗使用的术语;类似地,OAuth本身称HMAC / SHA-1为“签名”,这是不恰当的。)
OAuth文档在9.3节中说:
RSA-SHA1签名方法使用[RFC3447]第8.2节(更简单地称为PKCS#1)中定义的RSASSA-PKCS1-v1_5签名算法,使用SHA-1作为EMSA-PKCS1-v1_5的哈希函数。假设消费者以经过验证的方式向服务提供商提供其RSA公钥,其方式超出了本规范的范围。
这意味着:
以及如何完成这些工作超出了OAuth规范的范围。据推测,在某些时候,消费者向服务提供商展示了他的公钥,可能作为证书的一部分(服务提供商根据X.509规则正式验证),或通过其他一些确保“验证”的方式。关键在于,使用私钥计算的签名是一个令人信服的证据,证明它是由控制与服务提供商知道的公钥相对应的私钥的人在相同的签名数据上计算的;服务提供商仍必须确保公钥确实属于它认为自己所属的公钥。证书是一种通用且复杂的方式。