openssl证书制作及编程
来源:互联网 发布:淘宝产品排名规则 编辑:程序博客网 时间:2024/04/30 16:51
一、openssl证书制作:
1、创建目录./demoCA/ ./demoCA/newcerts/,创建文件 ./demoCA/index.txt ./demoCA/serial。
2、执行echo 01 > ./demoCA/serial
3、制作自己的CA证书
$openssl req -new -x509 -keyout ca.key -out ca.crt
4、生成服务端的私钥(key文件)及csr文件
$openssl genrsa -des3 -out server.key 1024
$openssl req -new -key server.key -out server.csr
5、生成客户端的私钥(key文件)及csr文件
$openssl genrsa -des3 -out client.key 1024
$openssl req -new -key client.key -out client.csr
6、用生成的CA的证书为刚才生成的server.csr,client.csr文件签名
$openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
$openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key
7、生成pem格式证书
有时需要用到pem格式的证书,可以用以下方式合并证书文件(crt)和私钥文件(key)来生成
$cat client.crt client.key> client.pem
$cat server.crt server.key > server.pem
二、openssl编程
openssl的编程有两种风格:原生态的和层层封装的。
2.1原生态openssl编程
需要使用BSD socket和openssl中的较底层的API。原生态openssl有两个比较重要的结构SSL和SSL_CTX。
SSL_CTX数据结构是用与建立SSL/TSL连接的结构,可用于指定通讯协议(SSLv23/TSLv1)、证书、密钥等相关信息。
SSL数据结构是和具体会话相关联的结构。
常用函数:
SSL_library_init():初始化一个openssl库。
SSL_CTX_new(const SSL_METHOD *method):创建一个CTX结构。
SSL_new(SSL_CTX *ctx):创建一个SSL结构。
SSL_set_fd(SSL *ssl, int fd):把ssl结构和具体会话相关联。
SSL_accept(SSL *ssl)、SSL_connect(SSL *ssl):用于SSL会话握手。
SSL_read(SSL *ssl, void *buf, int num)和SSL_write(SSL *ssl, void *buf, int num)用于SSL读写。
SSL_shutdown(SSL *ssl)用于关闭一个SSL/TSL会话。
使用这些函数就可以进行最基本的openssl编程了。Openssl编程框架如下。
代码示例:HTTPS服务器和客户端
服务器端:
客户端:
2.2层层封装的openssl编程。
这里BSD socket的基本操作,对上层是不可见的。而且openssl自己有对自己的底层操作进行了封装。
除此之外还需要了解BIO的概念。
BIO是openssl 对于io 类型的抽象封装,包括:内存、文件、日志、标准输入输出、socket、加/解密、摘要和ssl 通道等。
BIO分为两种:source/sink类型的BIO是数据源或输入数据源(我不知道sink该怎么翻译),例如,sokect BIO和文件BIO。而filter BIO就是把数据从一个BIO转换到另外一个BIO或应用接口,在转换过程中,这些数据可以不修改(如信息摘要BIO),也可以进行转换。
BIO链,可以预先设定好多个BIO之间的链接关系,当数据从source类型的BIO进来之后,数据自动再BIO链之间传递。这应该是BIO有吸引力的地方。比如三个BIO,mbio(内存类型),sbio(ssl类型),abio(accept类型),连成BIO链:mbio->sbio->abio。
那么对mbio的读操作实际上就包含了从accept接收数据、对加密数据ssl解密,最终把数据读到内存中的操作;对mbio的写操作实际上包含了对数据进行ssl加密,并把加密数据从socket发出去的操作。
BIO常用函数:
BIO * BIO_new(BIO_METHOD *type):生成BIO
BIO_set(BIO *a,BIO_METHOD *type):设置BIO
BIO_free(BIO *a):删除BIO
BIO_free_all(BIO *a):删除BIO链
BIO_read(BIO *b, void *buf, int len)
BIO_gets(BIO *b,char *buf, int size)
BIO_write(BIO *b, const void *buf, int len)
BIO_puts(BIO *b,const char *buf)
BIO * BIO_push(BIO *b,BIO *append):该函数把参数中名为append的BIO附加到名为b的BIO上,并返回b。
BIO * BIO_pop(BIO *b):为b的BIO从一个BIO链中移除并返回下一个BIO。
代码示例(echo):
服务器端:
客户端:
- openssl证书制作及编程
- OpenSSL证书制作及实例
- openssl 制作证书
- [读书笔记]openssl证书制作
- (ZT)openssl 制作证书
- openssl制作证书全过程
- openssl制作证书全过程
- openssl制作证书全过程
- OpenSSL密钥/证书制作
- openssl制作证书全过程
- OPENSSL 制作 Ikev2证书
- weblogic https openssl制作证书及服务器ssl配置
- 利用openssl管理证书及SSL编程第1部分: openssl证书管理
- 用Openssl API制作证书
- 用Openssl API制作证书
- 用Openssl API制作证书
- 用Openssl API制作证书
- openssl keytool 制作签名证书
- ubuntu快捷键
- 传说中比绿盟更优秀的地方
- C/C++中的字符串
- 编译ogre 1.7.1的时候出现Could not locate DirectX'的解决方法
- getClassLoader & getResource
- openssl证书制作及编程
- Linux信号的使用
- PNG文件结构分析
- innerHTML的读写属性
- JAVA多线程
- 首届 Google 暑期大学生博客分享大赛——2010 Android 篇 android关于 Google Map 开发的应用
- vmware VCB DP
- Hibernate缓存机制
- 通讯录信息管理系统