秘钥操作
这个命令会生成一个1024/2048位的密钥,包含私钥和公钥。
openssl genrsa -out private.key 1024/2038 (with out password protected)
openssl genrsa -des3 -out private.key 1024/2048 (password protected)
这个命令可以利用private.key文件生成公钥。
openssl rsa -in private.key -pubout -out public.key
查看私钥命令
openssl rsa -noout -text -in public.key
证书请求
openssl req -new -key private.key -out cert.csr (-config openssl.cnf)
openssl req -new -nodes -key private.key -out cert.csr (-config openssl.cnf)
这个命令将会生成一个证书请求,当然,用到了前面生成的密钥private.key文件
这里将生成一个新的文件cert.csr,即一个证书请求文件,你可以拿着这个文件去数字证书颁发机构(即CA)申请一个数字证书。CA会给你一个新的文件cacert.pem,那才是包含公钥给对方用的数字证书。
查看证书请求
openssl req -noout -text -in cert.csr
生成证书
自签名证书,用于自己测试,不需要CA签发
openssl req -new -x509 -key private.key -out cacert.pem -days 1095 (-config openssl.cnf)
CA签发证书:
CA是专门签发证书的权威机构,处于证书的最顶端。自签是用自己的私钥给证书签名,CA签发则是用CA的私钥给自己的证书签名来保证证书的可靠性,
利用OpenSSL可以自己作为CA进行证书签发,当然这并不权威。
CA签发证书生成的cacert.pem 见“建立CA颁发证书”
有了private.key和cacert.pem文件后就可以在自己的程序中使用了,比如做一个加密通讯的服务器
从证书中提取公钥
openssl x509 -in cacert.pem -pubkey >> public.key
查看证书信息
openssl x509 -noout -text -in cacert.pem
建立CA颁发证书
(1) 环境准备
首先,需要准备一个目录放置CA文件,包括颁发的证书和CRL(Certificate Revoke List)。
mkdir ./CA
(2) 创建配置文件
之前生成秘钥和证书可以进行命令行配置,但是在创建CA的时候必须使用配置文件,因为做证书颁发的时候只能使用配置文件。
创建配置文件如下:vi openssl.cnf
1 ################################################################
2 # openssl example configuration file.
3 # This is mostly used for generation of certificate requests.
4 #################################################################
5 [ ca ]
6 default_ca= CA_default # The default ca section
7 #################################################################
8
9 [ CA_default ]
10
11 dir=/opt/iona/OrbixSSL1.0c/certs # Where everything is kept
12 certs=$dir # Where the issued certs are kept
13 crl_dir= $dir/crl # Where the issued crl are kept
14 database= $dir/index.txt # database index file
15 new_certs_dir= $dir/new_certs # default place for new certs
16 certificate=$dir/CA/OrbixCA # The CA certificate
17 serial= $dir/serial # The current serial number
18 crl= $dir/crl.pem # The current CRL
19 private_key= $dir/CA/OrbixCA.pk # The private key
20 RANDFILE= $dir/.rand # private random number file
21 default_days= 365 # how long to certify for
22 default_crl_days= 30 # how long before next CRL
23 default_md= md5 # which message digest to use
24 preserve= no # keep passed DN ordering
25
26 # A few different ways of specifying how closely the request should
27 # conform to the details of the CA
28
29 policy= policy_match # For the CA policy
30
31 [ policy_match ]
32 countryName= match
33 stateOrProvinceName= match
34 organizationName= match
35 organizationalUnitName= optional
36 commonName= supplied
37 emailAddress= optional
38
39 # For the `anything' policy
40 # At this point in time, you must list all acceptable `object'
41 # types
42
43 [ policy_anything ]
44 countryName = optional
45 stateOrProvinceName= optional
46 localityName= optional
47 organizationName = optional
48 organizationalUnitName = optional
49 commonName= supplied
50 emailAddress= optional
51
52 [ req ]
53 default_bits = 1024
54 default_keyfile= privkey.pem
55 distinguished_name = req_distinguished_name
56 attributes = req_attributes
57
58 [ req_distinguished_name ]
59 countryName= Country Name (2 letter code)
60 countryName_min= 2
61 countryName_max = 2
62 stateOrProvinceName= State or Province Name (full name)
63 localityName = Locality Name (eg, city)
64 organizationName = Organization Name (eg, company)
65 organizationalUnitName = Organizational Unit Name (eg, section)
66 commonName = Common Name (eg. YOUR name)
67 commonName_max = 64
68 emailAddress = Email Address
69 emailAddress_max = 40
70
71 [ req_attributes ]
72 challengePassword = A challenge password
73 challengePassword_min = 4
74 challengePassword_max = 20
75 unstructuredName= An optional company name
View Code
根据配置文件。创建以下三个文件:
touch index.txt
touch index.txt.attr
touch serial 内容为01
(3) 生成CA私钥和证书
openssl genrsa -out ca.key 1024
openssl req -new -x509 -key ca.key -out ca.pem -days 365 -config openssl.cnf (CA只能自签名证书,注意信息与要颁发的证书信息一致)
(4) 颁发证书
颁发证书就是用CA的秘钥给其他人签名证书,输入需要证书请求,CA的私钥及CA的证书,输出的是签名好的还给用户的证书
这里用户的证书请求信息填写的国家省份等需要与CA配置一致,否则颁发的证书将会无效。
openssl ca -in ../cert.csr -out cacert.pem -cert ca.pem -keyfile ca.key -config openssl.cnf
对比CA颁发的证书提取公钥和私钥导出的公钥是否一致:
同时产生01.pem,这个是CA的备份保留,与生成发送给请求证书的内容一致,serial内序号自动+1。