当前位置: 技术问答>linux和unix
ACE SSL通信
来源: 互联网 发布时间:2017-04-12
本文导语: 我最近在做ACE SSL通信的东西,参考了 2 用OpenSSL 制作X509证书 2.1 建立自己的CA 在openssl 安装目录的bin 目录下,运行脚本:./CA.sh -newca(Windows 环境下运行:perl ca.pl –newca),出现提示符时,直接回车。 运行完毕...
我最近在做ACE SSL通信的东西,参考了
2 用OpenSSL 制作X509证书
2.1 建立自己的CA
在openssl 安装目录的bin 目录下,运行脚本:./CA.sh -newca(Windows 环境下运行:perl ca.pl –newca),出现提示符时,直接回车。 运行完毕后会生成一个demonCA 的目录,里面包含了ca 证书及其私钥。
2.2 生成客户端和服务端证书申请
openssl req -newkey rsa:1024 -out req1.pem -keyout sslclientkey.pem
openssl req -newkey rsa:1024 -out req2.pem -keyout sslserverkey.pem
2.3 签发客户端和服务端证书
openssl ca -in req1.pem -out sslclientcert.pem
openssl ca -in req2.pem -out sslservercert.pem
2.4 运行ssl 服务端和客户端
openssl s_server -cert sslservercert.pem -key sslserverkey.pem -CAfile demoCA/cacert.pem -ssl3 -Verify 1
openssl s_client -ssl3 -CAfile demoCA/cacert.pem -cert sslclientcert.pem -key sslclientkey.pem -Verify 1
不出错的话,应该可以正常通信了。
3 用ACE_SSL做安全的网络通信
ACE_SSL的通信使用ACE_SSL_SOCK_Stream流。服务方接收器使用ACE_SSL_SOCK_Acceptor,客户端连接器使用ACE_SSL_SOCK_Connector。具体参考下面的代码:
服务端:
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main(int argc, char* argv[])
{
//SSL环境初始化
ACE_SSL_Context* ssl=ACE_SSL_Context::instance();
ssl->certificate("sslservercert.pem");
ssl->load_trusted_ca("cacert.pem");
ssl->context()->default_passwd_callback_userdata = (void*)"私钥的保护密码";
ssl->private_key("sslserverkey.pem");
ssl->set_verify_peer(1); // 启用证书交验
int a = ssl->verify_private_key(); // a == 0 表示成功
//通信
char buf[1024];
ACE_SSL_SOCK_Stream stream;
ACE_INET_Addr addr (9999);
ACE_INET_Addr remote_addr;
ACE_SSL_SOCK_Acceptor acceptor(addr);
if (-1 == acceptor.accept(stream,&remote_addr))
return -1;
remote_addr.addr_to_string(buf,1024);
std::cout
2 用OpenSSL 制作X509证书
2.1 建立自己的CA
在openssl 安装目录的bin 目录下,运行脚本:./CA.sh -newca(Windows 环境下运行:perl ca.pl –newca),出现提示符时,直接回车。 运行完毕后会生成一个demonCA 的目录,里面包含了ca 证书及其私钥。
2.2 生成客户端和服务端证书申请
openssl req -newkey rsa:1024 -out req1.pem -keyout sslclientkey.pem
openssl req -newkey rsa:1024 -out req2.pem -keyout sslserverkey.pem
2.3 签发客户端和服务端证书
openssl ca -in req1.pem -out sslclientcert.pem
openssl ca -in req2.pem -out sslservercert.pem
2.4 运行ssl 服务端和客户端
openssl s_server -cert sslservercert.pem -key sslserverkey.pem -CAfile demoCA/cacert.pem -ssl3 -Verify 1
openssl s_client -ssl3 -CAfile demoCA/cacert.pem -cert sslclientcert.pem -key sslclientkey.pem -Verify 1
不出错的话,应该可以正常通信了。
3 用ACE_SSL做安全的网络通信
ACE_SSL的通信使用ACE_SSL_SOCK_Stream流。服务方接收器使用ACE_SSL_SOCK_Acceptor,客户端连接器使用ACE_SSL_SOCK_Connector。具体参考下面的代码:
服务端:
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main(int argc, char* argv[])
{
//SSL环境初始化
ACE_SSL_Context* ssl=ACE_SSL_Context::instance();
ssl->certificate("sslservercert.pem");
ssl->load_trusted_ca("cacert.pem");
ssl->context()->default_passwd_callback_userdata = (void*)"私钥的保护密码";
ssl->private_key("sslserverkey.pem");
ssl->set_verify_peer(1); // 启用证书交验
int a = ssl->verify_private_key(); // a == 0 表示成功
//通信
char buf[1024];
ACE_SSL_SOCK_Stream stream;
ACE_INET_Addr addr (9999);
ACE_INET_Addr remote_addr;
ACE_SSL_SOCK_Acceptor acceptor(addr);
if (-1 == acceptor.accept(stream,&remote_addr))
return -1;
remote_addr.addr_to_string(buf,1024);
std::cout