OpenSSL

 
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 *intintvoid *= &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;
}
06-03
### OpenSSL 使用指南与技术文档 OpenSSL 是一个强大的开源库,提供了加密算法、证书处理和密钥生成功能,广泛应用于网络通信安全[^1]。以下是一些关于 OpenSSL 的使用指南和技术文档的详细信息: #### 1. 安装 OpenSSL 在 Windows 环境下,可以使用轻量级版本 `Win64OpenSSL_Light-1_1_1b` 来安装 OpenSSL。下载并解压后,将可执行文件路径添加到系统的环境变量中以便全局调用[^1]。 #### 2. 常用命令行工具 OpenSSL 提供了一系列命令行工具,用于生成证书、处理私钥以及进行 SSL/TLS 操作。以下是几个常用的命令示例: - **生成私钥**: ```bash openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048 ``` 该命令会生成一个 2048 位的 RSA 私钥[^1]。 - **生成自签名证书**: ```bash openssl req -x509 -new -nodes -key private_key.pem -sha256 -days 365 -out certificate.crt ``` 此命令基于已有的私钥生成一个有效期为 365 天的自签名证书[^1]。 - **验证证书**: ```bash openssl x509 -in certificate.crt -text -noout ``` 通过此命令可以查看证书的详细信息。 #### 3. 配置 HTTPS 服务 在开发 HTTPS 服务时,可以使用 OpenSSL 生成的证书和私钥配置服务器。例如,在 Nginx 中,可以通过以下配置启用 HTTPS: ```nginx server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/certificate.crt; ssl_certificate_key /path/to/private_key.pem; location / { proxy_pass http://localhost:8080; } } ``` #### 4. 技术文档与资源 为了更深入地了解 OpenSSL,可以参考以下资源: - [OpenSSL 官方文档](https://www.openssl.org/docs/) - [OpenSSL Wiki](https://wiki.openssl.org/index.php/Main_Page) - [OpenSSL Cookbook](https://www.feistyduck.com/books/openssl-cookbook/) 这些资源提供了从基础到高级的全面指导,涵盖了证书管理、加密算法实现以及 TLS 协议的具体应用。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值