class OpenSSL::Netscape::SPKI

Eine Implementierung einer einfachen Public-Key-Infrastruktur (ausgesprochen „spooky“). Die Struktur ist definiert als

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

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

wobei die Definitionen von SubjectPublicKeyInfo und AlgorithmIdentifier in RFC5280 zu finden sind. SPKI wird typischerweise in Browsern zum Erstellen eines öffentlichen/privaten Schlüsselpaars und einer anschließenden Zertifikatsanforderung unter Verwendung des HTML <keygen>-Elements verwendet.

Beispiele

Erstellen einer 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

Überprüfen einer SPKI-Anfrage

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