openssl 创建证书的总结和注意事项
1.该文章从网上看了好多博客,并经过实践形成。环境为ubuntu12和ubuntu14
"========================================大纲提要和注意事项================================================================="
1.注意事项:
1)OpenSSL库中,各个函数的返回值的格式并不统一(有些用0表示失败,有些用0表示成功),请注意区分;
2)用在OpenSSL的fd不能设置为nonblock,否则在SSL_connect时会失败——感觉这一点限制了OpenSSL与除了libevent之外其他异步I/O库的适配
关于nonblock的问题,补充:可以在完成了SSL_connect/accept之后,将fd设置为nonblock
2.程序设计思想:
1)对程序来说,openssl将整个握手过程用一对函数体现,即客户端的SSL_connect和服务端的SSL_accept.而后的应用层数据交换则用SSL_read和 SSL_write来完成
Linux下基于OpenSSL的SSL安全通信设计
2)OpenSSL中的SSL安全通信可以分为两类,两类基本上的操作相同,一类是建立SSL环境后使用BIO读写,另一类是直接在socket上建立SSL上下文环境。
本文主要讨论在socket上建立SSL环境,以实现安全通信。首先需要生成一对客户机和服务器证书,这可以使用openssl的命令实现。
可以建立一个模拟的CA,生成数字证书。如下:
3.证书通俗的说:分为两类:(服务器的证书和秘钥); (客户端的证书和秘钥)。
一般情况下:不需要使用客户端的证书,(除非做银行、金融方面的加密业务,类似U盾。),它的作用是验证消息是该客户端发出的。
密码交互情况如下图:
"==========================================大纲提要和注意事项==============================================================="
"====================================自己试验过的,成功速度最快的==========================================="
1.最开始应该修改配置文件:一般我是修改/usr/local/ssl/openssl.cnf 这个配置文件;
2.设置环境变量,生成证书时访问这个配置文件:OPENSSL_CONF=/usr/local/ssl/openssl.cnf; export OPENSSL_CONF;
******************************************************
x509证书一般会用到三类文,key,csr,crt。
Key 是私用密钥openssl格,通常是rsa算法。
Csr 是证书请求文件,用于申请证书。在制作csr文件的时,必须使用自己的私钥来签署申,还可以设定一个密钥。
crt是CA认证后的证书文,(windows下面的,其实是crt),签署人用自己的key给你签署的凭证。
1.key的生成
openssl genrsa -des3 -out server.key 2048 (去掉中间的-des3可以生成不输密码的密钥)
这样是生成rsa私钥,des3算法,openssl格式,2048位强度。server.key是密钥文件名。为了生成这样的密钥,需要一个至少四位的密码。可以通过以下方法生成没有密码的key:
openssl rsa -in server.key -out server.key
server.key就是没有密码的版本了。
2. 生成CA的crt
openssl req -new -x509 -key server.key -out ca.crt -days 3650
生成的ca.crt文件是用来签署下面的server.csr文件。
3. csr的生成方法
openssl req -new -key server.key -out server.csr
需要依次输入国家,地区,组织,email。最重要的是有一个common name,可以写你的名字或者域名。如果为了https申请,这个必须和域名吻合,否则会引发浏览器警报。生成的csr文件交给CA签名后形成服务端自己的证书。
4. crt生成方法
CSR文件必须有CA的签名才可形成证书,可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢。
openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt
输入key的密钥后,完成证书生成。-CA选项指明用于被签名的csr证书,-CAkey选项指明用于签名的密钥,-CAserial指明序列号文件,而-CAcreateserial指明文件不存在时自动生成。
最后生成了私用密钥:server.key和自己认证的SSL证书:server.crt
"====================================自己试验过的,成功速度最快的==========================================="
"====================================TCP流协议与ssl消息读写的异同==========================================="
1)SSL实现必须读取整条记录,哪怕select返回了一个字节可读,那么ssl也要读取整个记录,这种基于纪录的读写方式就是为了正确的加密个解密。因此
如果用select模型的话可能会出现一些莫名其妙的问题,
2)事实上也正是ssl消息需要加密解密从而需要整个消息整个消息读写才使得ssl协议的行为和tcp的有了少有的不一致。
tcp的特点是流式传输,流式的特点就是没有消息边界,一个连接就是一个流,需要应用程序自己去划分自己的数据,举个例子就是一端写入x字节,
对端可能读出y字节,具体多少要看网络状况和窗口情况,tcp在这一点上是相当复杂的,应用程序的发送只是简单的将数据放入tcp的发送缓冲区,
而接收只是简单的从接收缓冲区中取回数据,反观udp就不是这样子,udp是基于数据报的,就是说不能分段,一端写入多少另一端就读出多少,当
然也可能永远收不到,也可能乱序等等。现在看看ssl,它看起来好像是结合了tcp和udp的特点,它是有连接的,必须可靠传输并且按照顺序收发,
但是在SSL record层面却不是流式的(在API层面依然是流式的),每次调用SSL_read必须读入一个ssl纪录,一个ssl纪录有一个固定大小的头部(5字节),
该头部指示了消息类型,ssl版本号以及消息长度,首先需要读出一个ssl消息头部,接下来就要在该头部的消息长度字段的指导下进行消息体的读取,
而且必须读取完整个完整消息之后才能返回成功,否则均返回失败,并且什么都不做,ssl读操作中,带有头的消息是read的最小单位。ssl3_read_bytes
是openssl中SSL_read最终要调用的函数,它内部调用了ssl3_get_record:
"====================================TCP流协议与ssl消息读写的异同==========================================="
openssl 创建证书的总结和注意事项的更多相关文章
- OpenSSL创建证书
使用OpenSSL创建证书.采用的OS为CentOS7. 1. 修改OpenSSL的配置文件 vim /etc/pki/tls/openssl.cnf [ CA_default ] dir = /et ...
- 使用Openssl创建证书
概述 SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socketlayer(SSL),SSL安全协议主要用来提供对用户和服务器的认证:对传送的数据进行加密和隐藏: ...
- 使用openssl创建自签名证书及部署到IIS教程
概要 本文讲解三个部分:1. 创建自签名证书2. 创建自己的证书颁发机构3. 以及如何配置IIS 创建自签名证书 首先,创建一个私钥文件: openssl genrsa -out myselfsign ...
- 使用 OpenSSL 创建私有 CA:3 用户证书
OpenSSL 创建私有 CA 三部曲:使用 OpenSSL 创建私有 CA:1 根证书使用 OpenSSL 创建私有 CA:2 中间证书使用 OpenSSL 创建私有 CA:3 用户证书 在前文&l ...
- 使用 OpenSSL 创建私有 CA:2 中间证书
OpenSSL 创建私有 CA 三部曲:使用 OpenSSL 创建私有 CA:1 根证书使用 OpenSSL 创建私有 CA:2 中间证书使用 OpenSSL 创建私有 CA:3 用户证书 本文将在前 ...
- 使用 OpenSSL 创建私有 CA:1 根证书
OpenSSL 创建私有 CA 三部曲:使用 OpenSSL 创建私有 CA:1 根证书使用 OpenSSL 创建私有 CA:2 中间证书使用 OpenSSL 创建私有 CA:3 用户证书 OpenS ...
- centos 配置Openssl并创建证书
具体详情参考:http://wiki.centos.org/HowTos/Https 一.安装软件 yum install mod_ssl openssl 二.创建证书: # Generate pri ...
- 使用OpenSSL工具制作X.509证书的方法及其注意事项总结
版权声明:本文为博主原创文章.转载请注明出处. https://blog.csdn.net/Ping_Fani07/article/details/21622545 怎样使用OpenSSL工具生成根证 ...
- [转帖]用 OpenSSL 创建可以用于 https 的证书
用 OpenSSL 创建可以用于 https 的证书 开会时 说到了安全问题 就简单鼓捣了一下 以后还是用nginx 转发比较好一些. https://blog.csdn.net/joyous/art ...
随机推荐
- codevs 1962 马棚问题--序列型DP
1962 马棚问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 每天,小明和他的马外出,然后他们一边跑一边玩耍.当他们结束 ...
- 【spring boot】使用注解@ConfigurationProperties读取配置文件时候 报错 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'rocketmqAutoConfiguration': Unsatisfied dependenc
如题,配置文件如下: #注册中心配置 eureka: instance: instanceId: ${spring.application.name}:${random.int} hostname: ...
- js禁止复制粘贴
1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键,其实是禁止快捷菜单,因为不光右键可以弹出这个菜单,键盘上空格 ...
- Linux音频驱动简述
一.数字音频 音频信号是一种连续变化的模拟信号,但计算机仅仅能处理和记录二进制的数字信号.由自然音源得到的音频信号必须经过一定的变换,成为数字音频信号之后,才干送到计算机中作进一步的处理. 数字音频系 ...
- web.config及<customErrors>节点之说明
Web.config文件是一个XML文本文件,它用来储存ASP.NETWeb 应用程序的配置信息(如最常用的设置ASP.NETWeb 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中.当你 ...
- Django 工作流程
一.Django 工作流程 在开始具体的代码之旅前,先来宏观地看下Django是如何处理Http Resquest的,如下图: 假设你已经在浏览器输入了 http://127.0.0.1:8000/p ...
- 解决html视频播放只有声音没有图像的办法
HTML5中并没有指定视频解码器,它留给了浏览器来决定. MP4有四种编码格式(MPEG4(DivX),MPEG4(Xvid),AVC(H264),HEVC(H265)): 只有使用AVC(H264) ...
- C#/Sqlite-SQLite PetaPoco django 打造桌面程序
为什么是 SQLite? 在以前的程序中, 我通常会使用 MySQL. 如果使用你程序的用户是一个软件小白, 而且远在另一个城市, 那么让她安装和部署 MySQL 将是一场噩梦: 她需要配置服务, 面 ...
- 编译安装mysql-5.6.40
编译安装mysql-5.6.40 环境说明 系统版本 CentOS 7.2 x86_64 软件版本 mysql-5.6.40 [root@db01 ~]# mkdir -p /serv ...
- 使用Sublime经验分享
Sublime轻量级.可是绝对是神一样的编辑器. 1.代码清晰美观 2.能够选择文件夹作为文件结构文件夹显示在左側 3.以tab的形式打开多个页面在同一个窗体内 设置方法例如以下: Preferenc ...