Veja um exemplo para adicionar um conjunto de extensões de recursos de cliente S / MIME ao assinar um certificado de usuário S / MIME, retirado de um exemplo na lista de discussão do OpenSSL :
[my_cert_extensions]
basicConstraints = CA:FALSE
keyUsage = critical, keyEncipherment, dataEncipherment
SMIME-CAPS = ASN1:SEQUENCE:smime_seq
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
[ smime_seq ]
SMIMECapability.0 = SEQWRAP,OID:sha1
SMIMECapability.1 = SEQWRAP,OID:sha256
SMIMECapability.2 = SEQWRAP,OID:sha1WithRSA
SMIMECapability.3 = SEQWRAP,OID:aes-256-ecb
SMIMECapability.4 = SEQWRAP,OID:aes-256-cbc
SMIMECapability.5 = SEQWRAP,OID:aes-256-ofb
SMIMECapability.6 = SEQWRAP,OID:aes-128-ecb
SMIMECapability.7 = SEQWRAP,OID:aes-128-cbc
SMIMECapability.8 = SEQWRAP,OID:aes-128-ecb
SMIMECapability.9 = SEQUENCE:rsa_enc
[ rsa_enc ]
capabilityID = OID:rsaEncryption
parameter = NULL
Isso é ativado, entre outras maneiras, usando a opção de linha de comando openssl
-extensions my_cert_extensions
.
Há mais duas peças no quebra-cabeça:
- mais detalhes sobre como os dados de extensão podem ser construídos estão na documentação da API do OpenSSL aqui , mas você precisa saber um pouco sobre ASN.1 e OIDs para entender isso.
- se a sua extensão for realmente personalizada, então você deve aplicar à IANA por Private Enterprise Number (isto é obrigatório se as suas extensões puderem ser vistas na natureza)
Se você deseja adicionar texto usando uma extensão existente , geralmente é um pouco mais fácil, se você tiver:
[ CA_default ]
...
x509_extensions = usr_cert
[ usr_cert ]
basicConstraints=CA:FALSE
...
nsComment = "This is my comment"
CA_default
é usado durante a assinatura normal da autoridade de certificação, se você puder usar uma extensão predefinida, tudo o que você precisa fazer é adicioná-lo à seção usr_cert
, sem necessidade de opções extras de linha de comando. ( nsComment
é tecnicamente descontinuado, mas ainda funciona, é um exemplo simples e é facilmente visualizável nas propriedades de certificado em navegadores comuns).
Consulte a x509v3_config
man page que explica os fundamentos das extensões e a origem do OpenSSL crypto / objects / objects.txt para o detalhes um pouco enigmáticos (esse arquivo é processado e usado para gerar código).
Um OID é tipicamente associado a um conceito distinto, como um substantivo , um verbo , um atributo ou até mesmo algo menos tangível. nsComment tem um significado definido (comentários em texto de forma livre dentro de certificados), outros como < href="http://www.alvestrand.no/objectid/2.5.29.15.html"> keyUsage
tem uma semântica mais rigorosa.
No OpenSSL, o nome "nsComment" é mapeado para o OID 2.16.840.1.113730.1.13, conforme definido em objects.txt
.
Cada extensão em um certificado X.509v3 tem um OID, consulte link .
Se não houver uma extensão adequada no OpenSSL (consulte RFC 5280 §4.2 Extenções de certificado ), você pode ser capaz de encontrar um e adicioná-lo (consulte a seção "Extensões arbitrárias" na página x509v3_config
man vinculada acima). Caso contrário, você precisará definir os OIDs para seus próprios propósitos.