一、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服务器和客户端
服务器端: