123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- How to setup your own Certificate Authority
- ===========================================
- Note: this howto requires the openssl binary, as well as classic
- UNIX tools (cat, touch, echo). If you use Windows, please consider
- installing Cygwin -- see http://cygwin.com/
- 1. Configure OpenSSL
- --------------------
- First of all, create sslconf.txt in the current directory
- (a basic example is provided at the end of this file).
- cat > sslconf.txt <<"EOF"
- [paste contents here]
- EOF
- Then you need to create the database and a starting serial number:
- touch index
- echo "01" > serial
- mkdir newcerts
- 2. Generate the CA certificate
- ------------------------------
- openssl req -config sslconf.txt -days 3653 -x509 -newkey rsa:2048 \
- -set_serial 0 -text -keyout test-ca.key -out test-ca.crt
- 3. Generate the private keys and certificate requests
- -----------------------------------------------------
- openssl genrsa -out server1.key 2048
- openssl genrsa -out server2.key 2048
- openssl genrsa -out client1.key 2048
- openssl genrsa -out client2.key 2048
- openssl req -config sslconf.txt -new -key server1.key -out server1.req
- openssl req -config sslconf.txt -new -key server2.key -out server2.req
- openssl req -config sslconf.txt -new -key client1.key -out client1.req
- openssl req -config sslconf.txt -new -key client2.key -out client2.req
- 4. Issue and sign the certificates
- ----------------------------------
- openssl ca -config sslconf.txt -in server1.req -out server1.crt
- openssl ca -config sslconf.txt -in server2.req -out server2.crt
- openssl ca -config sslconf.txt -in client1.req -out client1.crt
- openssl ca -config sslconf.txt -in client2.req -out client2.crt
- 5. To revoke a certificate and update the CRL
- ---------------------------------------------
- openssl ca -config sslconf.txt -revoke server1.crt
- openssl ca -config sslconf.txt -revoke client1.crt
- openssl ca -config sslconf.txt -gencrl -out crl.pem
- 6. To display a certificate and verify its validity
- ---------------------------------------------------
- openssl x509 -in server2.crt -text -noout
- cat test-ca.crt crl.pem > ca_crl.pem
- openssl verify -CAfile ca_crl.pem -crl_check server2.crt
- rm ca_crl.pem
- 7. To export a certificate into a .pfx file
- -------------------------------------------
- openssl pkcs12 -export -in client2.crt -inkey client2.key \
- -out client2.pfx
- ##================================================================
- ##============== Example OpenSSL configuration file ==============
- ##================================================================
- # References:
- #
- # /etc/ssl/openssl.conf
- # http://www.openssl.org/docs/apps/config.html
- # http://www.openssl.org/docs/apps/x509v3_config.html
- [ ca ]
- default_ca = my_ca
- [ my_ca ]
- certificate = test-ca.crt
- private_key = test-ca.key
- database = index
- serial = serial
- new_certs_dir = newcerts
- default_crl_days = 60
- default_days = 730
- default_md = sha1
- policy = my_policy
- x509_extensions = v3_usr
- [ my_policy ]
- countryName = optional
- stateOrProvinceName = optional
- organizationName = match
- organizationalUnitName = optional
- commonName = supplied
- emailAddress = optional
- [ req ]
- distinguished_name = my_req_dn
- x509_extensions = v3_ca
- [ my_req_dn ]
- countryName = Country Name..............
- countryName_min = 2
- countryName_max = 2
- stateOrProvinceName = State or Province Name....
- localityName = Locality Name.............
- 0.organizationName = Organization Name.........
- organizationalUnitName = Org. Unit Name............
- commonName = Common Name (required)....
- commonName_max = 64
- emailAddress = Email Address.............
- emailAddress_max = 64
- [ v3_ca ]
- basicConstraints = CA:TRUE
- subjectKeyIdentifier = hash
- authorityKeyIdentifier = keyid:always,issuer:always
- [ v3_usr ]
- basicConstraints = CA:FALSE
- subjectKeyIdentifier = hash
- authorityKeyIdentifier = keyid,issuer
|