我正在编写一个 .Net 类,用于从我们的中央身份验证服务器读取 cookie。它包含 UserId、一些时间戳和由 openssl_sign() 使用 2048 位 RSA 密钥和 SHA1 哈希创建的签名。
当前公钥在服务器上以 openssl PEM 格式提供,并且偶尔会更改。我无法仅使用 .Net 托管代码(尚未)读取密钥,并制定了以下过程使其正常工作:
- 从公钥中提取指数和模数。 - 检查密钥是否仍为 2048 位。 - 将密钥长度、指数和模数存储在源中,编译并部署(删除模数前导零以使其正常工作)。
然后,该类创建一个
我想让这个过程在密钥更改时不需要我创建、编译和部署新程序集。为了使事情更有趣,我想仅使用托管代码(排除了我找到的大多数示例)。当创建
添加:以前的公钥
当前公钥在服务器上以 openssl PEM 格式提供,并且偶尔会更改。我无法仅使用 .Net 托管代码(尚未)读取密钥,并制定了以下过程使其正常工作:
- 从公钥中提取指数和模数。 - 检查密钥是否仍为 2048 位。 - 将密钥长度、指数和模数存储在源中,编译并部署(删除模数前导零以使其正常工作)。
然后,该类创建一个
new RSACryptoServiceProvider(2048)
,并将公共组件使用 RSAParameters
结构馈送到 CSP 中。然后验证签名成功。我想让这个过程在密钥更改时不需要我创建、编译和部署新程序集。为了使事情更有趣,我想仅使用托管代码(排除了我找到的大多数示例)。当创建
AsnEncodedData(oid, data)
实例时,内部 ASN.1 Reader 听起来很完美,但我找到的唯一 oid,RSA aka 1.2.840.113549.1.1.1,没有起作用,只产生了原始字节。添加:以前的公钥
我发现 pempublic.cs,似乎使用 openSSL 的源代码解决了这个问题。我将保持问题开放,看看是否有其他解决方案。-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMW90O6C17fapbS35auKolsy7kI0FOE1
C08y5HqgZ0rMXoocV4nHSHYBm2HVx2QSR5OLQtERgWDmxOu+vwU1GXUCAwEAAQ==
-----END PUBLIC KEY-----