Extended Key Usage
2019-01-01T10:15:36Z.
The extended key usage specifies how a public key can be used. Occasionally it is necessary to configure the extended key usage when generating and deploying the certificate for use in certain applications, such as OpenVPN.
Edit OpenSSL configuration file
Note that you can make a copy of the OpenSSL configuration file and edit it. When using OpenSSL to manage the certificates, specify the path of the customized configuration file with the -config switch.
      Under the [ req ] section, update the
      x509_extensions attribute to point to the
      [ usr_cert ] section.
    
From:
x509_extensions	= v3_ca	# The extentions to add to the self signed cert
    To:
x509_extensions	= usr_cert
    
      Make sure the req_extensions attribute is specified and
      point to the [ v3_req ] section.
    
From:
# req_extensions = v3_req # The extensions to add to a certificate request
    To:
req_extensions = v3_req
    
      Update the [ usr_cert ] section in the configuration file.
    
[ usr_cert ]
basicConstraints = CA:FALSE
nsCertType = client, server, email
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
    The extendedKeyUsage specifies the extended key usage.
      Also update the [ v3_req ] section, make sure the extended
      key usage is being specified so that it is included in the public key to
      be signed by the certificate authority.
    
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection
    Now generate the private key and certificate signing request, run:
openssl ecparam -name secp384r1 -genkey -noout -out server.key chmod 600 server.key # Update the path of the OpenSSL configuration file. openssl req -config /path/to/openssl.cnf \ -new \ -sha256 \ -key server.key \ -out server.csr
Inspect the certificate signing request, run:
openssl req -text -in server.csr
Sample output:
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=HK, ST=Hong Kong, L=Hong Kong, O=Example Company, CN=example.com
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (384 bit)
                pub:
                    04:89:0f:d4:43:8b:c9:f0:d1:21:e4:2e:72:24:36:
                    17:17:db:e7:91:b4:13:29:a8:73:e4:f9:19:e1:8a:
                    d0:da:b4:eb:44:71:9b:05:df:87:13:ae:b3:2a:94:
                    59:d1:12:35:67:90:c6:b2:e5:d1:57:23:8c:c0:5f:
                    c5:0b:45:3b:ce:18:07:5e:5c:a5:1d:d5:30:d8:21:
                    97:9b:f3:1a:4d:b7:7e:b2:9d:e7:fb:22:5f:1a:48:
                    28:d7:a5:b5:bb:e6:8d
                ASN1 OID: secp384r1
                NIST CURVE: P-384
        Attributes:
        Requested Extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            X509v3 Key Usage:
                Digital Signature, Non Repudiation, Key Encipherment
            X509v3 Extended Key Usage:
                TLS Web Server Authentication, TLS Web Client Authentication, Code Signing, E-mail Protection
    Signature Algorithm: ecdsa-with-SHA256
            30:66:02:31:00:94:28:d3:81:3d:bf:0a:19:66:5c:18:21:eb:
            26:85:93:c9:3b:e5:74:0d:53:4c:b2:6a:03:1b:e3:30:2d:1a:
            83:b7:ea:09:a2:2e:13:82:59:d3:83:14:4d:19:ae:87:11:02:
            31:00:a5:51:df:7c:08:15:d8:e8:c0:74:d1:1d:b0:d1:a8:fa:
            a7:85:9a:0c:1e:18:fc:5e:d3:9c:0c:b6:42:58:82:49:14:0e:
            fb:3c:2a:8f:00:4f:bb:ec:be:a4:26:66:d3:9b
-----BEGIN CERTIFICATE REQUEST-----
MIIBuzCCAUACAQAwZTELMAkGA1UEBhMCSEsxEjAQBgNVBAgMCUhvbmcgS29uZzES
MBAGA1UEBwwJSG9uZyBLb25nMRgwFgYDVQQKDA9FeGFtcGxlIENvbXBhbnkxFDAS
BgNVBAMMC2V4YW1wbGUuY29tMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEiQ/UQ4vJ
8NEh5C5yJDYXF9vnkbQTKahz5PkZ4YrQ2rTrRHGbBd+HE66zKpRZ0RI1Z5DGsuXR
VyOMwF/FC0U7zhgHXlylHdUw2CGXm/MaTbd+sp3n+yJfGkgo16W1u+aNoFwwWgYJ
KoZIhvcNAQkOMU0wSzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIF4DAxBgNVHSUEKjAo
BggrBgEFBQcDAQYIKwYBBQUHAwIGCCsGAQUFBwMDBggrBgEFBQcDBDAKBggqhkjO
PQQDAgNpADBmAjEAlCjTgT2/ChlmXBgh6yaFk8k75XQNU0yyagMb4zAtGoO36gmi
LhOCWdODFE0ZrocRAjEApVHffAgV2OjAdNEdsNGo+qeFmgweGPxe05wMtkJYgkkU
Dvs8Ko8AT7vsvqQmZtOb
-----END CERTIFICATE REQUEST-----
    Once the certificate signing request is signed by the certificate authority, the public key should contain the specified extended key usage.
      When signing the certificate signing request as a certificate authority,
      check the [ ca ] and [ CA_default ] sections,
      make sure the x509_extensions attribute points to a section
      (usually [ usr_cert ]) that contains the specified extended
      key usage. Otherwise, add a new section and specify the extended key
      usage to be included in the signed public key, then use the
      -extensions switch of OpenSSL to specify the new section.