本文根据这篇博文(http://lovesea.blog.51cto.com/382446/95572)和《OpenSSL与网络信息安全:基础、结构和指令》一书整理。关于OpenSSL在Windows下的编译安装,参见上一篇文章。
准备工作:
1、添加配置文件(openssl.cnf)的环境变量:OPENSSL_CONF。配置文件可从OpenSSL解压后根目录下的apps目录下拷贝,再自行修改配置。
2、创建ssl目录,在ssl目录下创建newcerts目录、index.txt空文件、serial文件,在serial文件中写入序列号01。
3、打开配置文件(openssl.cnf),找到[CA_default]字段,将dir = ./demoCA 改为dir = . 。
4、以管理员身份运行命令提示符,进入新建的ssl目录;输入openssl,进入openssl指令环境,不然后面每个命令前面都要加上openssl。
正式开工:
1、生成自签名根证书。
(1)、生成根证书私钥(ca.key)。
生成一个2048位的RSA私钥,并输出到ca.key文件中,对输出密钥不进行加密,指令为:genrsa -out ca.key 2048 。
可以以加密方式生成私钥,加密算法可以用des、des3、idea、aes128、ads192和aes256。这里选用了aes256:genrsa -aes256 -out ca.key 2048 。运行时会提示输入密码。
可以给未加密的私钥添加口令:rsa -aes256 -in ca.key -out ca.key 。
也可以去除加密私钥的口令:rsa -in ca.key -out ca.key 。
(2)、生成有效期为90天的根证书(ca.crt)。x509选项让指令生成一个自签名根证书二不是输出一个证书请求。
req -new -x509 -days 90 -key ca.key -out ca.crt
2、生成服务器端私钥和证书。
(1)、生成服务器私钥(server.key):
genrsa -aes256 -out server.key 2048 。
(2)、生成服务器证书请求文件(server.csr):
req -new -key server.key -out server.csr 。
(3)、用CA证书给服务器签证,限定证书(server.crt)有效期为2012年7月29日到2013年1月1日。date的格式为YYMMDDHHMMSSZ,即“年月日时分秒Z” 。
ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -startdate 120729000000Z -enddate 130101000000Z
3、生成客户端私钥和证书。
(1)、生成客户端私钥(client.key):
genrsa -aes256 -out client.key 2048 。
(2)、生成客户端证书请求文件(client.csr):
req -new -key client.key -out client.csr 。
(3)、用CA证书给客户端签证,限定证书(client.crt)有效期为2012年8月8日到2013年8月8日。
ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -startdate 120808000000Z -enddate 130808000000Z
所有证书生成完毕。
应用:
1、单向验证,客户验证服务器端,例如https服务器。
服务器端需两个文件:server.crt,server.key ;
客户端如浏览器需要一个文件:ca.crt。
2、如果需要自己实现双向认证。
服务器端需要的文件为:ca.crt,server.crt,server.key ;
客户端需要的文件为: ca.crt,client.crt,client.key 。
**** 2017-05-26 补充 ***
其中客户端的 client.truststore 文件对应上面的 ca.crt ,client.p12文件对应上面的 client.crt,client.key 。
2、Qt HTTPS SSL 双向验证
p12文件是证书和私钥的合体,Qt貌似只能证书和私钥分开使用。
如果需要用 Qt 对接上面 Android 的服务端,
可以用 openssl 把 client.p12 中提取出用户证书和私钥;
用 java 的 keytool 把 jks 文件(client.truststore)转换成 p12文件,再用 openssl 提取根证书。
3、Qt的 QSslCertificate::importPkcs12 函数只能加载包含私钥的 p12 文件,加载不包含私钥的 p12 文件会崩溃。
相关阅读:
2、那些证书相关的玩意儿(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等)
3、Open××× 详细配置说明:Open×××连接两个局域网(使用华硕RT-AC87U)
*** walker ***