使用OpenSSL加载证书文件的过程分析与代码示例
本文由CSDN-蚍蜉撼青松【主页:http://blog.csdn.net/howeverpf】原创,转载请注明出处!
一般说来,当前主流网站都走的单项认证的路子,即只有服务器需向客户端发送证书,客户端不需向服务器发送证书。在这种情况下,加载证书是服务端需要做的事情。所以下面给个基于openssl的SSL服务端例程,内含加载证书的代码(有特别标注):
// 前面省略了服务端socket套接字的创建过程
// 接受客户端的socket连接
m_nConversion = accept(nListen, (sockaddr *)&addr_client, &size);
if (m_nConversion == -1)
{
printf("accept failed!\n");
continue;
}
// 创建服务端SSL会话环境
m_pServerCtx = SSL_CTX_new(SSLv23_server_method());
if (m_pServerCtx == 0)
{
printf("SSL_CTX_new for Server failed!\n");
return -1;
}
/*-------------------------Begin of:服务端公私钥加载-------------------------*/
// 为服务端指定SSL连接所用公钥证书
//参数 m_pServerCtx,服务端SSL会话环境
//参数 pCertPath,你存放公钥证书的路径
//参数 SSL_FILETYPE_PEM,指定你所要加载的公钥证书的文件编码类型为 Base64
if (SSL_CTX_use_certificate_file(m_pServerCtx, pCertPath, SSL_FILETYPE_PEM) != 1)
{
printf("SSL_CTX_use_certificate_file failed!\n");
return -1;
}
// 为服务端指定SSL连接所用私钥
//参数 m_pServerCtx,服务端SSL会话环境
//参数 pKeyPath,你存放对应私钥文件的路径
//参数 SSL_FILETYPE_PEM,指定你所要加载的私钥文件的文件编码类型为 Base64
if (SSL_CTX_use_PrivateKey_file(m_pServerCtx, pKeyPath, SSL_FILETYPE_PEM) != 1)
{
printf("SSL_CTX_use_PrivateKey_file failed!\n");
return -1;
}
// 检查SSL连接 所用的私钥与证书是否匹配【所以你仅有公钥