Preview Ruby 4.1 is a preview. It can change before the final release. Switch to Ruby 4.0 →
class method
Gem::Security.sign
sign(certificate, signing_key, signing_cert, age = ONE_YEAR, extensions = EXTENSIONS, serial = 1)
lib/rubygems/security.rb
View on GitHub ↗
# File tmp/rubies/ruby-4.1.0-preview1/lib/rubygems/security.rb, line 619
def self.sign(certificate, signing_key, signing_cert, age = ONE_YEAR, extensions = EXTENSIONS, serial = 1)
signee_subject = certificate.subject
signee_key = certificate.public_key
alt_name = certificate.extensions.find do |extension|
extension.oid == "subjectAltName"
end
extensions = extensions.merge "subjectAltName" => alt_name.value if
alt_name
issuer_alt_name = signing_cert.extensions.find do |extension|
extension.oid == "subjectAltName"
end
extensions = extensions.merge "issuerAltName" => issuer_alt_name.value if
issuer_alt_name
signed = create_cert signee_subject, signee_key, age, extensions, serial
signed.issuer = signing_cert.subject
digest_name = Gem::Security::DIGEST_NAME if digest_required?(signing_key)
begin
signed.sign signing_key, digest_name
rescue OpenSSL::PKey::PKeyError, ArgumentError
raise Gem::Security::Exception,
"incorrect signing key for signing"
# Ruby OpenSSL only accepts the nil digest ML-DSA needs from 3.3 on.
rescue TypeError
raise if digest_name
raise Gem::Security::Exception,
"certificate signing failed: ML-DSA requires Ruby OpenSSL >= 3.3."
end
end
Sign the public key from certificate with the signing_key and signing_cert, using the Gem::Security::DIGEST_NAME. Uses the default certificate validity range and extensions.
Returns the newly signed certificate.