openssl 生成SSL证书

注意:

  1. 制作签发证书的请求文件时,需要输入Common Name参数,此参数一定为当前主机的IP地址,否则将会显示证书错误。(我直接输入XX即可)

图解SSL协议(http://blog.csdn.net/wallezhe/article/details/50977337)
基于OpenSSL自建CA和颁发SSL证书(http://seanlook.com/2015/01/18/openssl-self-sign-ca/)
openSSL安装问题(http://blog.sina.com.cn/s/blog_6151984a0100f0q4.html)

SSL握手

爱丽丝给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。
鲍勃确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。
爱丽丝确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给鲍勃。
鲍勃使用自己的私钥,获取爱丽丝发来的随机数(即Premaster secret)。
爱丽丝和鲍勃根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"(session key),用来加密接下来的整个对话过程。

概念

首先要有一个CA根证书,然后用CA根证书来签发用户证书。
用户进行证书申请:一般先生成一个私钥,然后用私钥生成证书请求(证书请求里应含有公钥信息),再利用证书服务器的CA根证书来签发证书。

后缀详解

.key格式:私有的密钥
.csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
.crt格式:证书文件,certificate的缩写
.crl格式:证书吊销列表,Certificate Revocation List的缩写
.pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式

添加 index.txt 和 serial 文件

cd /etc/pki/CA/
touch /etc/pki/CA/index.txt 
touch /etc/pki/CA/serial
echo 01 > /etc/pki/CA/serial

CA根证书的生成

生成CA私钥(.key)–>生成CA证书请求(.csr)–>自签名得到根证书(.crt)(CA给自已颁发的证书)。

# Generate CA private key 
openssl genrsa -out ca.key 2048 
# Generate CSR 
openssl req -new -key ca.key -out ca.csr
# Generate Self Signed certificate(CA 根证书)
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt

在实际的软件开发工作中,往往服务器就采用这种自签名的方式,因为毕竟找第三方签名机构是要给钱的,也是需要花时间的。

如下:

[root@localhost ssl]# openssl genrsa -out ca.key 2048
Generating RSA private key, 2048 bit long modulus
......................................................+++
..........................................+++
e is 65537 (0x10001)
[root@localhost ssl]# ls
ca.key
[root@localhost ssl]# openssl req -new -x509 -key ca.key -out ca.crt
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) [XX]:HY
State or Province Name (full name) []:HY
Locality Name (eg, city) [Default City]:xx
Organization Name (eg, company) [Default Company Ltd]:xx
Organizational Unit Name (eg, section) []:xx
Common Name (eg, your name or your server's hostname) []:xx

用户证书的生成

生成私钥(.key)–>生成证书请求(.csr)–>用CA根证书签名得到证书(.crt)

服务器端用户证书

openssl genrsa -des3 -out server.key 1024 
openssl req -new -key server.key -out server.csr
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key 

客户端用户证书

openssl genrsa -des3 -out client.key 1024 
openssl req -new -key client.key -out client.csr
openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key

生成pem格式证书

有时需要用到pem格式的证书,可以用以下方式合并证书文件(crt)和私钥文件(key)来生成

cat client.crt client.key > client.pem 
cat server.crt server.key > server.pem

报错解决

openssl无法同时建两个crt文件——建完server.crt 后,建立client.crt时报错

[root@vm ssl]# openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config /usr/share/ssl/openssl.cnf
Using configuration from /usr/share/ssl/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 2 (0x2)
        Validity
            Not Before: Mar 17 00:40:06 2009 GMT
            Not After : Mar 17 00:40:06 2010 GMT
        Subject:
            countryName               = GB
            stateOrProvinceName       = Berkshire
            organizationName          = My Company Ltd
。。。
Certificate is to be certified until Mar 17 00:40:06 2010 GMT (365 days)
Sign the certificate? [y/n]:y
failed to update database
TXT_DB error number 2

解决:删掉上次server.crt时生成的/etc/pki/CA/index.txt,再touch一个新的。

你可能感兴趣的:(ssl)