class OpenSSL::Netscape::SPKI

简单公钥基础设施实现 (发音 “spooky”)。 结构定义如下:

PublicKeyAndChallenge ::= SEQUENCE {
  spki SubjectPublicKeyInfo,
  challenge IA5STRING
}

SignedPublicKeyAndChallenge ::= SEQUENCE {
  publicKeyAndChallenge PublicKeyAndChallenge,
  signatureAlgorithm AlgorithmIdentifier,
  signature BIT STRING
}

其中 SubjectPublicKeyInfo 和 AlgorithmIdentifier 的定义可以在 RFC5280 中找到。 SPKI 通常用于浏览器生成公钥/私钥对以及后续的证书请求,使用 HTML <keygen> 元素。

示例

创建 SPKI

key = OpenSSL::PKey::RSA.new 2048
spki = OpenSSL::Netscape::SPKI.new
spki.challenge = "RandomChallenge"
spki.public_key = key.public_key
spki.sign(key, OpenSSL::Digest.new('SHA256'))
#send a request containing this to a server generating a certificate

验证 SPKI 请求

request = #...
spki = OpenSSL::Netscape::SPKI.new request
unless spki.verify(spki.public_key)
  # signature is invalid
end
#proceed