当前位置: 首页 > news >正文

专业郑州做网站网站建设的步骤和要点

专业郑州做网站,网站建设的步骤和要点,网站几个页面,淘宝客源码参考链接 openssl实现双向认证教程#xff08;服务端代码客户端代码证书生成#xff09;_huang714的博客-CSDN博客_ssl_ctx_load_verify_locations基于openssl实现https双向身份认证及安全通信_tutu-hu的博客-CSDN博客_基于openssl实现 注意事项 openssl版本差异很可能导致程…参考链接 openssl实现双向认证教程服务端代码客户端代码证书生成_huang714的博客-CSDN博客_ssl_ctx_load_verify_locations基于openssl实现https双向身份认证及安全通信_tutu-hu的博客-CSDN博客_基于openssl实现 注意事项 openssl版本差异很可能导致程序编译与运行出现问题本程序在OpenSSL 1.1.1  11 Sep 2018 版本下执行编译没有问题 创建目录 目录结构如下所示创建目录使用命令mkdir创建文件使用命令touch路径说明 client路径/home/chy-cpabe/ssl_server_client/client/pemserver路径/home/chy-cpabe/ssl_server_client/server/pemca路径/home/chy-cpabe/ssl_server_client/ca  生成证书 生成ca证书 # CA证书及密钥生成方法一----直接生成CA密钥及其自签名证书 openssl req -newkey rsa:2048 -passout pass:123456 -keyout ca_rsa_private.pem -x509 -days 365 -out ca.crt -subj /CCN/STGD/LSZ/OCOM/OUNSP/CNCA/emailAddressca_emailqq.com Server  生成server证书 # 服务器证书及密钥生成方法一----直接生成服务器密钥及待签名证书 openssl req -newkey rsa:2048 -passout pass:server -keyout server_rsa_private.pem -out server.csr -subj /CCN/STGD/LSZ/OCOM/OUNSP/CNSERVER/emailAddressserver_emailqq.com对server证书进行签名 # 使用CA证书及密钥对服务器证书进行签名 openssl x509 -req -days 365 -in server.csr -CA /home/chy-cpabe/ssl_server_client/ca/ca.crt -CAkey /home/chy-cpabe/ssl_server_client/ca/ca_rsa_private.pem -passin pass:123456 -CAcreateserial -out server.crt生成未加密的server的密钥 # 将加密的RSA密钥转成未加密的RSA密钥避免每次读取都要求输入解密密码 # 密码就是生成私钥文件时设置的passout、读取私钥文件时要输入的passin比如这里要输入“server” openssl rsa -in server_rsa_private.pem -out server_rsa_private.pem.unsecure Client 生成client证书 # 客户端证书及密钥生成方法一----直接生成客户端密钥及待签名证书 openssl req -newkey rsa:2048 -passout pass:client -keyout client_rsa_private.pem -out client.csr -subj /CCN/STGD/LSZ/OCOM/OUNSP/CNCLIENT/emailAddressclient_emailqq.com对client证书进行签名  # 使用CA证书及密钥对客户端证书进行签名 openssl x509 -req -days 365 -in client.csr -CA /home/chy-cpabe/ssl_server_client/ca/ca.crt -CAkey /home/chy-cpabe/ssl_server_client/ca/ca_rsa_private.pem -passin pass:123456 -CAcreateserial -out client.crt生成未加密的client的密钥 # 将加密的RSA密钥转成未加密的RSA密钥避免每次读取都要求输入解密密码 # 密码就是生成私钥文件时设置的passout、读取私钥文件时要输入的passin比如这里要输入“client” openssl rsa -in client_rsa_private.pem -out client_rsa_private.pem.unsecure 程序 注意事项ca的证书需要程序内部指定server和client的证书通过形参进行传递 server端程序 #include stdio.h #include stdlib.h #include errno.h #include string.h #include sys/types.h #include netinet/in.h #include sys/socket.h #include sys/wait.h #include unistd.h #include arpa/inet.h #include openssl/ssl.h #include openssl/err.h#define MAXBUF 1024void ShowCerts(SSL * ssl) {X509 *cert;char *line;cert SSL_get_peer_certificate(ssl);// SSL_get_verify_result()是重点SSL_CTX_set_verify()只是配置启不启用并没有执行认证调用该函数才会真证进行证书认证// 如果验证不通过那么程序抛出异常中止连接if(SSL_get_verify_result(ssl) X509_V_OK){printf(证书验证通过\n);}if (cert ! NULL) {printf(数字证书信息:\n);line X509_NAME_oneline(X509_get_subject_name(cert), 0, 0);printf(证书: %s\n, line);free(line);line X509_NAME_oneline(X509_get_issuer_name(cert), 0, 0);printf(颁发者: %s\n, line);free(line);X509_free(cert);} elseprintf(无证书信息\n); }int main(int argc, char **argv) {int sockfd, new_fd;socklen_t len;struct sockaddr_in my_addr, their_addr;unsigned int myport, lisnum;char buf[MAXBUF 1];SSL_CTX *ctx;if (argv[1])myport atoi(argv[1]);elsemyport 7838;if (argv[2])lisnum atoi(argv[2]);elselisnum 2;/* SSL 库初始化 */SSL_library_init();/* 载入所有 SSL 算法 */OpenSSL_add_all_algorithms();/* 载入所有 SSL 错误消息 */SSL_load_error_strings();/* 以 SSL V2 和 V3 标准兼容方式产生一个 SSL_CTX 即 SSL Content Text */ctx SSL_CTX_new(SSLv23_server_method());/* 也可以用 SSLv2_server_method() 或 SSLv3_server_method() 单独表示 V2 或 V3标准 */if (ctx NULL) {ERR_print_errors_fp(stdout);exit(1);}// 双向验证// SSL_VERIFY_PEER---要求对证书进行认证没有证书也会放行// SSL_VERIFY_FAIL_IF_NO_PEER_CERT---要求客户端需要提供证书但验证发现单独使用没有证书也会放行SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT, NULL);// 设置信任根证书if (SSL_CTX_load_verify_locations(ctx, /home/chy-cpabe/ssl_server_client/ca/ca.crt,NULL)0){ERR_print_errors_fp(stdout);exit(1);}/* 载入用户的数字证书 此证书用来发送给客户端。 证书里包含有公钥 */if (SSL_CTX_use_certificate_file(ctx, argv[3], SSL_FILETYPE_PEM) 0) {ERR_print_errors_fp(stdout);exit(1);}/* 载入用户私钥 */if (SSL_CTX_use_PrivateKey_file(ctx, argv[4], SSL_FILETYPE_PEM) 0) {ERR_print_errors_fp(stdout);exit(1);}/* 检查用户私钥是否正确 */if (!SSL_CTX_check_private_key(ctx)) {ERR_print_errors_fp(stdout);exit(1);}/* 开启一个 socket 监听 */if ((sockfd socket(PF_INET, SOCK_STREAM, 0)) -1) {perror(socket);exit(1);} elseprintf(socket created\n);bzero(my_addr, sizeof(my_addr));my_addr.sin_family PF_INET;my_addr.sin_port htons(myport);my_addr.sin_addr.s_addr INADDR_ANY;if (bind(sockfd, (struct sockaddr *) my_addr, sizeof(struct sockaddr)) -1) {perror(bind);exit(1);} elseprintf(binded\n);if (listen(sockfd, lisnum) -1) {perror(listen);exit(1);} elseprintf(begin listen\n);while (1) {SSL *ssl;len sizeof(struct sockaddr);/* 等待客户端连上来 */if ((new_fd accept(sockfd, (struct sockaddr *) their_addr, len)) -1) {perror(accept);exit(errno);} elseprintf(server: got connection from %s, port %d, socket %d\n,inet_ntoa(their_addr.sin_addr), ntohs(their_addr.sin_port),new_fd);/* 基于 ctx 产生一个新的 SSL */ssl SSL_new(ctx);/* 将连接用户的 socket 加入到 SSL */SSL_set_fd(ssl, new_fd);/* 建立 SSL 连接 */if (SSL_accept(ssl) -1) {perror(accept);close(new_fd);break;}ShowCerts(ssl);/* 开始处理每个新连接上的数据收发 */bzero(buf, MAXBUF 1);strcpy(buf, server-client);/* 发消息给客户端 */len SSL_write(ssl, buf, strlen(buf));if (len 0) {printf(消息%s发送失败错误代码是%d错误信息是%s\n, buf, errno,strerror(errno));goto finish;} elseprintf(消息%s发送成功共发送了%d个字节\n, buf, len);bzero(buf, MAXBUF 1);/* 接收客户端的消息 */len SSL_read(ssl, buf, MAXBUF);if (len 0)printf(接收消息成功:%s共%d个字节的数据\n, buf, len);elseprintf(消息接收失败错误代码是%d错误信息是%s\n,errno, strerror(errno));/* 处理每个新连接上的数据收发结束 */finish:/* 关闭 SSL 连接 */SSL_shutdown(ssl);/* 释放 SSL */SSL_free(ssl);/* 关闭 socket */close(new_fd);}/* 关闭监听的 socket */close(sockfd);/* 释放 CTX */SSL_CTX_free(ctx);return 0; } client程序 #include stdio.h #include string.h #include errno.h #include sys/socket.h #include resolv.h #include stdlib.h #include netinet/in.h #include arpa/inet.h #include unistd.h #include openssl/ssl.h #include openssl/err.h#define MAXBUF 1024void ShowCerts(SSL * ssl) {X509 *cert;char *line;cert SSL_get_peer_certificate(ssl);// SSL_get_verify_result()是重点SSL_CTX_set_verify()只是配置启不启用并没有执行认证调用该函数才会真证进行证书认证// 如果验证不通过那么程序抛出异常中止连接if(SSL_get_verify_result(ssl) X509_V_OK){printf(证书验证通过\n);}if (cert ! NULL) {printf(数字证书信息:\n);line X509_NAME_oneline(X509_get_subject_name(cert), 0, 0);printf(证书: %s\n, line);free(line);line X509_NAME_oneline(X509_get_issuer_name(cert), 0, 0);printf(颁发者: %s\n, line);free(line);X509_free(cert);} elseprintf(无证书信息\n); }int main(int argc, char **argv) {int sockfd, len;struct sockaddr_in dest;char buffer[MAXBUF 1];SSL_CTX *ctx;SSL *ssl;if (argc ! 5) {printf(参数格式错误正确用法如下\n\t\t%s IP地址 端口\n\t比如:\t%s 127.0.0.1 80\n此程序用来从某个IP 地址的服务器某个端口接收最多 MAXBUF 个字节的消息,argv[0], argv[0]);exit(0);}/* SSL 库初始化参看 ssl-server.c 代码 */SSL_library_init();OpenSSL_add_all_algorithms();SSL_load_error_strings();ctx SSL_CTX_new(SSLv23_client_method());if (ctx NULL) {ERR_print_errors_fp(stdout);exit(1);}// 双向验证// SSL_VERIFY_PEER---要求对证书进行认证没有证书也会放行// SSL_VERIFY_FAIL_IF_NO_PEER_CERT---要求客户端需要提供证书但验证发现单独使用没有证书也会放行SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT, NULL);// 设置信任根证书if (SSL_CTX_load_verify_locations(ctx, /home/chy-cpabe/ssl_server_client/ca/ca.crt,NULL)0){ERR_print_errors_fp(stdout);exit(1);}/* 载入用户的数字证书 此证书用来发送给客户端。 证书里包含有公钥 */if (SSL_CTX_use_certificate_file(ctx, argv[3], SSL_FILETYPE_PEM) 0) {ERR_print_errors_fp(stdout);exit(1);}/* 载入用户私钥 */if (SSL_CTX_use_PrivateKey_file(ctx, argv[4], SSL_FILETYPE_PEM) 0) {ERR_print_errors_fp(stdout);exit(1);}/* 检查用户私钥是否正确 */if (!SSL_CTX_check_private_key(ctx)) {ERR_print_errors_fp(stdout);exit(1);}/* 创建一个 socket 用于 tcp 通信 */if ((sockfd socket(AF_INET, SOCK_STREAM, 0)) 0) {perror(Socket);exit(errno);}printf(socket created\n);/* 初始化服务器端对方的地址和端口信息 */bzero(dest, sizeof(dest));dest.sin_family AF_INET;dest.sin_port htons(atoi(argv[2]));if (inet_aton(argv[1], (struct in_addr *) dest.sin_addr.s_addr) 0) {perror(argv[1]);exit(errno);}printf(address created\n);/* 连接服务器 */if (connect(sockfd, (struct sockaddr *) dest, sizeof(dest)) ! 0) {perror(Connect );exit(errno);}printf(server connected\n);/* 基于 ctx 产生一个新的 SSL */ssl SSL_new(ctx);SSL_set_fd(ssl, sockfd);/* 建立 SSL 连接 */if (SSL_connect(ssl) -1)ERR_print_errors_fp(stderr);else {printf(Connected with %s encryption\n, SSL_get_cipher(ssl));ShowCerts(ssl);}/* 接收对方发过来的消息最多接收 MAXBUF 个字节 */bzero(buffer, MAXBUF 1);/* 接收服务器来的消息 */len SSL_read(ssl, buffer, MAXBUF);if (len 0)printf(接收消息成功:%s共%d个字节的数据\n,buffer, len);else {printf(消息接收失败错误代码是%d错误信息是%s\n,errno, strerror(errno));goto finish;}bzero(buffer, MAXBUF 1);strcpy(buffer, from client-server);/* 发消息给服务器 */len SSL_write(ssl, buffer, strlen(buffer));if (len 0)printf(消息%s发送失败错误代码是%d错误信息是%s\n,buffer, errno, strerror(errno));elseprintf(消息%s发送成功共发送了%d个字节\n,buffer, len);finish:/* 关闭连接 */SSL_shutdown(ssl);SSL_free(ssl);close(sockfd);SSL_CTX_free(ctx);return 0; } 编译程序 server端sudo gcc ssl_server.c -o server -lssl -lcrypto -ldlclient端sudo gcc ssl_client.c -o client -lssl -lcrypto -ldl 运行程序 server端sudo ./server 7838 1 /home/chy-cpabe/ssl_server_client/server/pem/server.crt /home/chy-cpabe/ssl_server_client/server/pem/server_rsa_private.pem.unsecureclient端sudo ./client 127.0.0.1 7838 /home/chy-cpabe/ssl_server_client/client/pem/client.crt /home/chy-cpabe/ssl_server_client/client/pem/client_rsa_private.pem.unsecure 运行截图 server端 client端 补充知识 # CA证书及密钥生成方法一----直接生成CA密钥及其自签名证书 # 如果想以后读取私钥文件ca_rsa_private.pem时不需要输入密码亦即不对私钥进行加密存储那么将-passout pass:123456替换成-nodes openssl req -newkey rsa:2048 -passout pass:123456 -keyout ca_rsa_private.pem -x509 -days 365 -out ca.crt -subj /CCN/STGD/LSZ/OCOM/OUNSP/CNCA/emailAddressyouremailqq.com # CA证书及密钥生成方法二----分步生成CA密钥及其自签名证书 # openssl genrsa -aes256 -passout pass:123456 -out ca_rsa_private.pem 2048 # openssl req -new -x509 -days 365 -key ca_rsa_private.pem -passin pass:123456 -out ca.crt -subj /CCN/STGD/LSZ/OCOM/OUNSP/CNCA/emailAddressyouremailqq.com# 服务器证书及密钥生成方法一----直接生成服务器密钥及待签名证书 # 如果想以后读取私钥文件server_rsa_private.pem时不需要输入密码亦即不对私钥进行加密存储那么将-passout pass:server替换成-nodes openssl req -newkey rsa:2048 -passout pass:server -keyout server_rsa_private.pem -out server.csr -subj /CCN/STGD/LSZ/OCOM/OUNSP/CNSERVER/emailAddressyouremailqq.com # 服务器证书及密钥生成方法二----分步生成服务器密钥及待签名证书 # openssl genrsa -aes256 -passout pass:server -out server_rsa_private.pem 2048 # openssl req -new -key server_rsa_private.pem -passin pass:server -out server.csr -subj /CCN/STGD/LSZ/OCOM/OUNSP/CNSERVER/emailAddressyouremailqq.com # 使用CA证书及密钥对服务器证书进行签名 openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca_rsa_private.pem -passin pass:123456 -CAcreateserial -out server.crt # 将加密的RSA密钥转成未加密的RSA密钥避免每次读取都要求输入解密密码 # 密码就是生成私钥文件时设置的passout、读取私钥文件时要输入的passin比如这里要输入“server” openssl rsa -in server_rsa_private.pem -out server_rsa_private.pem.unsecure# 客户端证书及密钥生成方法一----直接生成客户端密钥及待签名证书 # 如果想以后读取私钥文件client_rsa_private.pem时不需要输入密码亦即不对私钥进行加密存储那么将-passout pass:client替换成-nodes openssl req -newkey rsa:2048 -passout pass:client -keyout client_rsa_private.pem -out client.csr -subj /CCN/STGD/LSZ/OCOM/OUNSP/CNCLIENT/emailAddressyouremailqq.com # 客户端证书及密钥生成方法二----分步生成客户端密钥及待签名证书 # openssl genrsa -aes256 -passout pass:client -out client_rsa_private.pem 2048 # openssl req -new -key client_rsa_private.pem -passin pass:client -out client.csr -subj /CCN/STGD/LSZ/OCOM/OUNSP/CNCLIENT/emailAddressyouremailqq.com # 使用CA证书及密钥对客户端证书进行签名 openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca_rsa_private.pem -passin pass:123456 -CAcreateserial -out client.crt # 将加密的RSA密钥转成未加密的RSA密钥避免每次读取都要求输入解密密码 # 密码就是生成私钥文件时设置的passout、读取私钥文件时要输入的passin比如这里要输入“client” openssl rsa -in client_rsa_private.pem -out client_rsa_private.pem.unsecure
http://www.yutouwan.com/news/234827/

相关文章:

  • 澄海网站建设公司wordpress 社区 插件
  • 做课件的软件下载带有蓝色的网站个人网站 名称
  • 没有备案的网站百度能收录台州公司网站建设
  • 宣传 网站建设方案wordpress主题制作实例
  • 上海住房和城市建设厅网站wordpress如何调用分类目录
  • 张家口城乡建设局网站郑州一建招聘
  • 制作logo免费网站好项目推荐平台
  • 好网站建设公司报价网页设计师需要学什么课程
  • 中国建设银行重庆网站首页宁波seo服务推广平台
  • 临沂市建设局网站改版2022年中国企业500强名单
  • 网站布局结构主要分为江苏城乡建设局网站
  • 宁陵网站建设汕头潮阳网站建设
  • 四站合一网站建设公司网上购物哪个平台能买到正品
  • 陕西省住房建设厅官方网站中小企业网站建设多少钱
  • 网站备案是给什么进行备案系统小说
  • 深圳网站建设 龙华信科免费软件下载网站哪个好
  • 内部链接网站大全网站按钮设计成什么颜色原因
  • 傻瓜式网站全网关键词指数查询
  • 网站备案 强制宝塔和WordPress一样吗
  • 做网站和编程在郑州建设网站这么做
  • 数码网站建设论文做电子商务平台网站需要多少钱
  • 朝城做网站公司平面设计画图软件
  • 呼伦贝尔网站建设做淘宝网站用什么软件
  • 深圳企业模板网站建设微商可以做网站推广吗
  • wcm 可以做网站吗衡阳县专业做淘宝网站
  • 建设搜索引擎友好的网站推广普通话手抄报简单漂亮
  • 网站备案查询接口帮忙做公司网站
  • 杭州企业网站定制html网页制作简单范例
  • 百度网站怎么建设的家具公司网站模板下载
  • 专业制作广告字潍坊网站建设seo