Extensionsl Custom Extension

2

Eu sei como criar certificados x509 com a linha de comando openssl. Mas agora eu quero criar um com uma extensão personalizada. Como posso fazer isso com a linha de comando openssl?

    
por user93353 10.03.2014 / 14:16

2 respostas

4

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.

    
por 10.03.2014 / 18:49
3

Adicione a extensão personalizada a um arquivo de configuração openssl.cnf personalizado ou a um arquivo de extensões específico e faça referência a isso na sua linha de comando.

openssl ca -config ./my-openssl.cnf -extensions ./my-openssl-extensions.cnf <options>

Na página de manual:

-extensions section the section of the configuration file containing certificate extensions to be added when a certificate is issued (defaults to x509_extensions unless the -extfile option is used). If no extension section is present then, a V1 certificate is created. If the extension section is present (even if it is empty), then a V3 certificate is created. See the x509v3_config(5) manual page for details of the extension section format.

    
por 10.03.2014 / 14:54