本文根据这篇博文(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 文件会崩溃。

相关阅读:

*** walker ***

openssl qt 生成秘钥_OpenSSL证书生成(Windows环境)相关推荐

  1. QT使用AES加密MAC地址生成秘钥文件并存取

    1.下载QT第三方AES库 https://github.com/bricke/Qt-AES 2.拷贝头文件 将aesni下的头文件添加到工程的头文件中 将AES库文件下的qaesencryption ...

  2. mysql通过ssl的方式生成秘钥

    -- mysql ssl 生成秘钥 1 check ssl是否已经开启mysql> show variables like '%ssl%'; +---------------+--------- ...

  3. linux生成license,License生成秘钥

    一 License 简介 开发的软件产品在交付使用的时候,往往会授权一段时间的试用期,这个时候license就派上用场了.不同于在代码中直接加上时间约束,需要重新授权的时候使用license可以避免修 ...

  4. PGP生成秘钥对及应用

    PGPDesktop下载链接:https://download.csdn.net/download/hfy19981024/10438982 1.下载安装PGP 安装很简单,根据安装包中的步骤一步一步 ...

  5. java中secretkey,java生成秘钥key,并保存秘钥到文件中

    本例子采用的是Java的对称加密其中的一种方式(3DES),其他的加密方式也类似.生成一个key秘钥,发送方使用生成的key秘钥进行加密操作,然后把生成的key秘钥保存到文件中,提供给需要解密的一方使 ...

  6. java项目的秘钥怎么保存_java生成秘钥key,并保存秘钥到文件中

    本例子采用的是Java的对称加密其中的一种方式(3DES),其他的加密方式也类似.生成一个key秘钥,发送方使用生成的key秘钥进行加密操作,然后把生成的key秘钥保存到文件中,提供给需要解密的一方使 ...

  7. Shiro 生成秘钥

    Shiro 生成秘钥[官方] import org.apache.shiro.codec.Base64;import javax.crypto.KeyGenerator; import javax.c ...

  8. crypto-js 前端DES加密/解密、生成秘钥 详解

    DES概述 DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非 ...

  9. 怎么用git在本地生成密钥_git上传代码到远程仓库(附:生成秘钥)

    1. 一开始使用git时,可能要使用到相关的密钥 生成秘钥的方法:(1)ssh-keygen -t rsa -C "github注册的邮箱名" 随后一直enter就好,提示输入密码 ...

最新文章

  1. [Win7]如何还原[.bat]文件关联
  2. 解决导入Android例子时“Unable to resolve target 'android-x' ”的错误
  3. 对DbRuleAuthorizationProvider的修改
  4. Delphi的笔记整理(一)
  5. 浙江师范计算机考研怎么样,浙江师范大学考研难吗?一般要什么水平才可以进入?...
  6. leetcode 148. Sort List | 148. 排序链表(最优解归并排序,O(1)空间)
  7. 安卓案例:利用定时器实现逐帧动画
  8. scau 8633 回文划分
  9. k8s部署应用nginx
  10. 海外服务器配置多少带宽比较合适?
  11. gitee和gitHub的命令和详细步骤操作
  12. php幻灯片图片不显示不出来,织梦dedecms默认模板幻灯片无法显示图片的解决方法...
  13. 剑指OFFER思路总结与代码分享——树篇(Java实现)
  14. 强烈安利:小顽简报,一款高效实用的PPT新插件
  15. Symbian OS应用编程图形篇之架构
  16. 电大本科计算机应用基础网考答案,中央电大本科计算机应用基础网考试题选择题及答案...
  17. 一文读懂上拉电阻:工作原理和阻值确定
  18. 爬虫系列 一次采集.NET WebForm网站的坎坷历程
  19. 设计,看上去很美 wayfarer
  20. 阿里云海外服务器网络评测

热门文章

  1. spark业务开发-列选择
  2. 12-100V降压12V5V3.3V/3A恒压电动车车载设备电源IC
  3. 微型计算机CLD什么意思,房地产里说的CLD是什么意思
  4. 利用计算机提高数学课堂教学,运用信息技术提高数学课堂教学实效
  5. 福美来轿车遥控钥匙匹配方法 转载
  6. go语言 c# 混合编程 pdf,【C# 调用 Go 语言】0x1 Hello Golang-Go语言中文社区
  7. linux去掉文件空行,linux下删除文本的空行
  8. dev/watchdog和dev/watchdog0 是同一个设备
  9. 【山东日照seo招聘】网站SEO优化中注意哪些小细节?
  10. 信息学奥赛C++语言:美人松的高度2