| 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
 
 
  |