提示输入 A challenge password,这个是根证书口令。输入 defonds 并回车后:
提示输入 An optional company name,输入 df 并回车。private 目录下有 ca.csr 文件生成。
2.1.4 生成凭证 crt 文件 $ sudo openssl x509 -req -days 365 -in private/ca.csr -signkey private/ca.key -out private/ca.crt
控制台输出
Signature ok
subject=http://www.likecs.com/C=CN/ST=Shanghai/L=Shanghai/O=Defonds/OU=Dev/CN=localhost/emailAddress=defonds@163.com
Getting Private key
private 目录下有 ca.crt 文件生成。
2.1.5 为我们的 key 设置起始序列号 $ sudo echo FACE > serial
可以是任意四个字符
2.1.6 创建 CA 键库 $ sudo touch index.txt
2.1.7 为 "用户证书" 的移除创建一个证书撤销列表 $ sudo openssl ca -gencrl -out /usr/local/nginx/ca/private/ca.crl -crldays 7 -config "/usr/local/nginx/ca/conf/openssl.conf"
输出
Using configuration from /usr/local/nginx/ca/conf/openssl.conf
private 目录下有 ca.crl 文件生成。
2.2 服务器证书的生成 2.2.1 创建一个 key $ sudo openssl genrsa -out server/server.key
输出
Generating RSA private key, 512 bit long modulus
...........................++++++++++++
.................++++++++++++
e is 65537 (0x10001)
server 目录下有 server.key 文件生成。
博主 20150520 加注:openssl 默认生成 512 位的。一般是用 2048 位的:sudo openssl genrsa -out server/server.key 2048
这时会要求你输入和 2.1.2.2 步一样的那些问题,所有输入需要和那一步一致。但 A challenge password 是服务器证书口令,可以与根证书口令一致。这里:
server 目录下有 server.csr 文件生成。
2.2.3 使用我们私有的 CA key 为刚才的 key 签名 $ sudo openssl ca -in server/server.csr -cert private/ca.crt -keyfile private/ca.key -out server/server.crt -config "/usr/local/nginx/ca/conf/openssl.conf"
输出
两次都输入 y,server 目录下有 server.crt 文件生成。
2.3 客户端证书的生成 2.3.1 创建存放 key 的目录 users $ sudo mkdir users
位置 /usr/local/nginx/ca/users。
2.3.2 为用户创建一个 key $ sudo openssl genrsa -des3 -out /usr/local/nginx/ca/users/client.key 1024
要求输入 pass phrase,这个是当前 key 的口令,以防止本密钥泄漏后被人盗用。两次输入同一个密码(比如我这里输入 defonds),users 目录下有 client.key 文件生成。
2.3.3 为 key 创建一个证书签名请求 csr 文件 $ sudo openssl req -new -key /usr/local/nginx/ca/users/client.key -out /usr/local/nginx/ca/users/client.csr
提示输入 pass phrase,即 client.key 的口令。将 2.3.2 步保存的 pass phrase 输入后并回车:
要求你输入和 2.1.3 步一样的那些问题。输入需要和那一步一致。但 A challenge password 是客户端证书口令(请注意将它和 client.key 的口令区分开!),可以与服务器端证书或者根证书口令一致:
users 目录下有 client.csr 文件生成。
2.3.4 使用我们私有的 CA key 为刚才的 key 签名 $ sudo openssl ca -in /usr/local/nginx/ca/users/client.csr -cert /usr/local/nginx/ca/private/ca.crt -keyfile /usr/local/nginx/ca/private/ca.key -out /usr/local/nginx/ca/users/client.crt -config "/usr/local/nginx/ca/conf/openssl.conf"
输出
Using configuration from /usr/local/nginx/ca/conf/openssl.conf
Check that the request matches the signature
Signature ok
The Subject\'s Distinguished Name is as follows
countryName :PRINTABLE:\'CN\'
stateOrProvinceName :PRINTABLE:\'Shanghai\'
localityName :PRINTABLE:\'Shanghai\'
organizationName :PRINTABLE:\'Defonds\'
organizationalUnitName:PRINTABLE:\'Dev\'
commonName :PRINTABLE:\'localhost\'
emailAddress :IA5STRING:\'defonds@163.com\'
Certificate is to be certified until Mar 16 11:47:48 2016 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
两次都输入 y,users 目录下有 client.crt 文件生成。
2.3.5 将证书转换为大多数浏览器都能识别的 PKCS12 文件$ sudo openssl pkcs12 -export -clcerts -in /usr/local/nginx/ca/users/client.crt -inkey /usr/local/nginx/ca/users/client.key -out /usr/local/nginx/ca/users/client.p12
要求输入 client.key 的 pass phrase,输入 2.3.2 步输入的 pass phrase 并回车后: