Once you have a private key, you can proceed to create a Certificate Signing Request (CSR). This is a formal request asking a CA to sign a certificate, and it contains the public key of the entity requesting the certificate and some information about the entity. This data will all be part of the certificate. A CSR is always signed with the private key corresponding to the public key it carries.
CSR creation is usually an interactive process during which you’ll be providing the elements of the certificate distinguished name. Read the instructions given by the
openssl tool carefully; if you want a field to be empty, you must enter a single dot (
.) on the line, rather than just hit Return. If you do the latter, OpenSSL will populate the corresponding CSR field with the default value. (This behavior doesn’t make any sense when used with the default OpenSSL configuration, which is what virtually everyone does. It does make sense once you realize you can actually change the defaults, either by modifying the OpenSSL configuration or by providing your own configuration files.)
$ openssl req -new -key fd.key -out fd.csr Enter pass phrase for fd.key: **************** You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:GB State or Province Name (full name) [Some-State]:. Locality Name (eg, city) :London Organization Name (eg, company) [Internet Widgits Pty Ltd]:Feisty Duck Ltd Organizational Unit Name (eg, section) : Common Name (e.g. server FQDN or YOUR name) :www.feistyduck.com Email Address : Please enter the following 'extra' attributes to be sent with your certificate request A challenge password : An optional company name :
According to Section 5.4.1 of RFC 2985,1 challenge password is an optional field that was intended for use during certificate revocation as a way of identifying the original entity that had requested the certificate. If entered, the password will be included verbatim in the CSR and communicated to the CA. It’s rare to find a CA that relies on this field; all instructions I’ve seen recommend leaving it alone. Having a challenge password does not increase the security of the CSR in any way. Further, this field should not be confused with the key passphrase, which is a separate feature.
After a CSR is generated, use it to sign your own certificate and/or send it to a public CA and ask it to sign the certificate. Both approaches are described in the following sections. But before you do that, it’s a good idea to double-check that the CSR is correct. Here’s how:
$ openssl req -text -in fd.csr -noout Certificate Request: Data: Version: 1 (0x0) Subject: C = GB, L = London, O = Feisty Duck Ltd, CN = www.feistyduck.com Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (256 bit) pub: 04:8a:d5:de:69:30:c7:77:b0:a0:54:f7:b3:34:9a: 96:1c:23:81:e3:9c:0c:81:a6:8a:a5:14:76:f4:4c: b3:10:cb:ee:50:d1:ea:70:e9:7f:8f:75:67:f9:12: 83:b0:11:e7:6c:64:de:bc:af:bd:3f:43:da:b8:41: 96:75:34:63:85 ASN1 OID: prime256v1 NIST CURVE: P-256 Attributes: a0:00 Signature Algorithm: ecdsa-with-SHA256 30:44:02:20:52:b9:cf:ca:d1:25:1c:b7:57:65:fb:24:5d:95: 15:f0:39:79:36:6c:d6:0a:42:6e:26:7c:54:e8:71:17:a5:99: 02:20:5a:e0:cd:b3:60:ec:2c:fc:29:8c:f9:21:01:08:9a:a3: 0d:fc:9a:d3:4f:24:fb:23:4f:c6:d7:a2:14:d1:54:f9