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