OpenSSL
来源:互联网 发布:sql注入防护 编辑:程序博客网 时间:2024/05/09 05:03
int password_callback(char *buf, int size, int rwflag, void *userdata)
...{
//回调函数,由于加载证书的函数并没有请求使用加密证书的密码
//从而,OpenSSL 为获得密码提供了一种回调机制。
printf("*** Callback function called ");
strcpy(buf, "SnailBreak");//密码为SnailBreak
return 1;
}
int main(int argc,char** argv)
...{
SSL_CTX *ctx;//SSL上下文指针
SSL *ssl;//SSL指针
//BIO是用来处理包括文件和套接字在内的各种类型的通信
BIO *bio, *abio, *out;//bio指向主要的 BIO 对象,是abio指向等待连接使用的BIO,out指向服务器与客户机通信的的对象。
int (*callback)(char *, int, int, void *) = &password_callback;//回调函数
puts("服务器运行在安全模式下. ");
//初始化OpenSSL
SSL_load_error_strings();
ERR_load_BIO_strings();
ERR_load_SSL_strings();
OpenSSL_add_all_algorithms();
ctx = SSL_CTX_new(SSLv23_server_method());//创建SSL上下文
//加载证书,完整的服务器证书包括两个部分:公钥和私钥
SSL_CTX_set_default_passwd_cb(ctx, callback);//安装回调函数,提供加密证书密码
SSL_CTX_use_certificate_file(ctx, "certificate.pem", SSL_FILETYPE_PEM);//加载服务器证书,该证书包含服务器公钥,是发送给客户机的
SSL_CTX_use_PrivateKey_file(ctx, "private.key", SSL_FILETYPE_PEM)//加载服务器私钥
bio = BIO_new_ssl(ctx, 0);//创建BIO对象
//安装BIO到SSL中去
BIO_get_ssl(bio, &ssl);
SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
abio = BIO_new_accept("4422");//服务器在端口4422监听
BIO_set_accept_bios(abio, bio);
//等待客户端连接
//在winsock 或 BSD Socket中,accept 函数是等待客户端的连接。OpenSSL 中的对应部分是 BIO_do_accept,
//不过我们不是只调用一次 accept 然后等待,而是在等待之前,必须要调用 BIO_do_accept 两次。
BIO_do_accept(abio);
BIO_do_accept(abio);
out = BIO_pop(abio);//响应到达连接
BIO_do_handshake(out);//与客户端进行握手,防止中间人攻击
//握手成功后,服务器与客户端就是在一个加密信道上进行秘密通信了
//服务器与客户端双方交换数据
//.........
BIO_free_all(out);
BIO_free_all(bio);
BIO_free_all(abio);
SSL_CTX_free(ctx);
return 0;
}
...{
//回调函数,由于加载证书的函数并没有请求使用加密证书的密码
//从而,OpenSSL 为获得密码提供了一种回调机制。
printf("*** Callback function called ");
strcpy(buf, "SnailBreak");//密码为SnailBreak
return 1;
}
int main(int argc,char** argv)
...{
SSL_CTX *ctx;//SSL上下文指针
SSL *ssl;//SSL指针
//BIO是用来处理包括文件和套接字在内的各种类型的通信
BIO *bio, *abio, *out;//bio指向主要的 BIO 对象,是abio指向等待连接使用的BIO,out指向服务器与客户机通信的的对象。
int (*callback)(char *, int, int, void *) = &password_callback;//回调函数
puts("服务器运行在安全模式下. ");
//初始化OpenSSL
SSL_load_error_strings();
ERR_load_BIO_strings();
ERR_load_SSL_strings();
OpenSSL_add_all_algorithms();
ctx = SSL_CTX_new(SSLv23_server_method());//创建SSL上下文
//加载证书,完整的服务器证书包括两个部分:公钥和私钥
SSL_CTX_set_default_passwd_cb(ctx, callback);//安装回调函数,提供加密证书密码
SSL_CTX_use_certificate_file(ctx, "certificate.pem", SSL_FILETYPE_PEM);//加载服务器证书,该证书包含服务器公钥,是发送给客户机的
SSL_CTX_use_PrivateKey_file(ctx, "private.key", SSL_FILETYPE_PEM)//加载服务器私钥
bio = BIO_new_ssl(ctx, 0);//创建BIO对象
//安装BIO到SSL中去
BIO_get_ssl(bio, &ssl);
SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
abio = BIO_new_accept("4422");//服务器在端口4422监听
BIO_set_accept_bios(abio, bio);
//等待客户端连接
//在winsock 或 BSD Socket中,accept 函数是等待客户端的连接。OpenSSL 中的对应部分是 BIO_do_accept,
//不过我们不是只调用一次 accept 然后等待,而是在等待之前,必须要调用 BIO_do_accept 两次。
BIO_do_accept(abio);
BIO_do_accept(abio);
out = BIO_pop(abio);//响应到达连接
BIO_do_handshake(out);//与客户端进行握手,防止中间人攻击
//握手成功后,服务器与客户端就是在一个加密信道上进行秘密通信了
//服务器与客户端双方交换数据
//.........
BIO_free_all(out);
BIO_free_all(bio);
BIO_free_all(abio);
SSL_CTX_free(ctx);
return 0;
}
- OpenSSL
- OpenSSL
- OpenSSL
- OpenSSL
- OpenSSL
- Openssl
- openssl
- openssl
- OpenSSL
- OpenSSL
- openssl
- Openssl
- openssl
- openssl
- OpenSSL
- openssl
- openssl
- OpenSSL
- Coffee & Movie= Happy Time!!
- windows2003不能自动分配USB移动硬盘盘符的解决方法:
- 欢迎来我的博客.
- 进程和线程通信方式
- SAP的netweaver应用服务器控制台之一
- OpenSSL
- Asp.net页面之间传递参数的几种方法荟萃
- SAP的netweaver应用服务器控制台之二---启动控制台
- 计算机围棋网络协议及c源代码
- SAP的netweaver应用服务器控制台之三---控制台界面布局
- Driver Debugging with WinDbg and VMWare
- 用VB操作注册表
- 俺又回来了!又来CSDN学习来了!
- 一些关于计算机围棋的文章