資源簡(jiǎn)介
其中包含openssl1.1.1在win10下編譯的方法,以及VSRSA、ECC、SM2身份認(rèn)證demo源碼,以及命令行生成證書(shū)的文檔。目前openssl1.1.1和1.1.1a測(cè)試SM2會(huì)報(bào)錯(cuò),原因可能和openssl支持不夠有關(guān)。

代碼片段和文件信息
#include?“stdafx.h“
#include?
#include?
#include?
#include?
#include?
#include?
#include
#include?
#include???
#include???
#include?
#include?
#include?
#pragma?warning(disable:4996)
#define?MAXBUF?1024
char?caCertFilePath[MAX_PATH]={0};??????//ca證書(shū)路徑
char?clientCertFilePath[MAX_PATH]={0};??//服務(wù)端證書(shū)路徑
char?clientPrivateFilePath[MAX_PATH]={0}; //服務(wù)端私鑰路徑
void?ShowCerts(SSL?*?ssl)
{
X509?*cert;
char?*line;
cert?=?SSL_get_peer_certificate(ssl);
//?SSL_get_verify_result()是重點(diǎn),SSL_CTX_set_verify()只是配置啟不啟用并沒(méi)有執(zhí)行認(rèn)證,調(diào)用該函數(shù)才會(huì)真證進(jìn)行證書(shū)認(rèn)證
//?如果驗(yàn)證不通過(guò),那么程序拋出異常中止連接
if(SSL_get_verify_result(ssl)?==?X509_V_OK){
printf(“證書(shū)驗(yàn)證通過(guò)\n“);
}
if?(cert?!=?NULL)?{
printf(“數(shù)字證書(shū)信息:\n“);
line?=?X509_NAME_oneline(X509_get_subject_name(cert)?0?0);
printf(“證書(shū):?%s\n“?line);
//free(line);
line?=?X509_NAME_oneline(X509_get_issuer_name(cert)?0?0);
printf(“頒發(fā)者:?%s\n“?line);
//free(line);
X509_free(cert);
}?else
printf(“無(wú)證書(shū)信息!\n“);
}
void?Auth_Two()
{
int?sockfd?len;
struct?sockaddr_in?dest;
char?buffer[MAXBUF?+?1];
SSL_CTX?*ctx;
SSL?*ssl;
unsigned?int?myport;
char?*myip=“127.0.0.1“;
myport=7838;
/*if?(argc?!=?5)?{
printf(“參數(shù)格式錯(cuò)誤!正確用法如下:\n\t\t%s?IP地址?端口\n\t比如:\t%s?127.0.0.1?80\n此程序用來(lái)從某個(gè)“
“IP?地址的服務(wù)器某個(gè)端口接收最多?MAXBUF?個(gè)字節(jié)的消息“
argv[0]?argv[0]);
system(“pause“);
exit(0);
}*/
/*?SSL?庫(kù)初始化,參看?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);
system(“pause“);
exit(1);
}
//?雙向驗(yàn)證
//?SSL_VERIFY_PEER---要求對(duì)證書(shū)進(jìn)行認(rèn)證,沒(méi)有證書(shū)也會(huì)放行
//?SSL_VERIFY_FAIL_IF_NO_PEER_CERT---要求客戶(hù)端需要提供證書(shū),但驗(yàn)證發(fā)現(xiàn)單獨(dú)使用沒(méi)有證書(shū)也會(huì)放行
SSL_CTX_set_verify(ctx?SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT?NULL);
//?設(shè)置信任根證書(shū)
if?(SSL_CTX_load_verify_locations(ctx?caCertFilePathNULL)<=0){
ERR_print_errors_fp(stdout);
system(“pause“);
exit(1);
}
/*?載入用戶(hù)的數(shù)字證書(shū),?此證書(shū)用來(lái)發(fā)送給客戶(hù)端。?證書(shū)里包含有公鑰?*/
/* FILE?*clientf=fopen(“../file/client.crt““r“);
char?bufStr[5000]={0};
fread(bufStr15000clientf);
fclose(clientf);*/
if?(SSL_CTX_use_certificate_file(ctx?clientCertFilePath?SSL_FILETYPE_PEM)?<=?0)?{
ERR_print_errors_fp(stdout);
system(“pause“);
exit(1);
}
/*?載入用戶(hù)私鑰?*/
/*FILE?*clientRsaf=fopen(“../file/client_rsa_private.pem.unsecure““r“);
memset(bufStr05000);
fread(bufStr15000clientRsaf);
fclose(clientRsaf);*/
if?(SSL_CTX_use_PrivateKey_file(ctx?clientPrivateFilePath?SSL_FILETYPE_PEM)?<=?0)?{
ERR_print_errors_fp(stdout);
system(“pause“);
exit(1);
}
/*?檢查用戶(hù)私鑰是否正確?*/
if?(!SSL_CTX_check_private_key(ctx))?{
ERR_print_errors_fp(stdout);
system(“pause“);
exit(1);
}
WSADATA?wsd;
int?resStartup?=?WSAStartup(MAKEWORD(22)&wsd);
if(0?!=?resStartup)
{
print
?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----
?????文件??????????0??2019-02-01?13:42??openSSL\Ecc_Cert\.rnd
?????文件????????712??2019-01-21?15:48??openSSL\Ecc_Cert\ca.crt
?????文件????????428??2019-01-21?15:46??openSSL\Ecc_Cert\ca.csr
?????文件????????310??2019-01-21?15:46??openSSL\Ecc_Cert\ca.key
?????文件?????????42??2019-01-21?16:36??openSSL\Ecc_Cert\ca.srl
?????文件????????602??2019-01-21?15:53??openSSL\Ecc_Cert\client.crt
?????文件????????432??2019-01-21?15:53??openSSL\Ecc_Cert\client.csr
?????文件????????310??2019-01-21?15:52??openSSL\Ecc_Cert\client_ecc_private.pem
?????文件????????598??2019-01-21?15:51??openSSL\Ecc_Cert\server.crt
?????文件????????436??2019-01-21?15:51??openSSL\Ecc_Cert\server.csr
?????文件????????310??2019-01-21?15:51??openSSL\Ecc_Cert\server_ecc_private.pem
?????文件????2380288??2019-01-18?14:55??openSSL\openssl?RSA身份認(rèn)證源碼\OpensslClient\Debug\libcrypto-1_1.dll
?????文件?????500224??2019-01-18?14:55??openSSL\openssl?RSA身份認(rèn)證源碼\OpensslClient\Debug\libssl-1_1.dll
?????文件??????39936??2019-01-22?11:18??openSSL\openssl?RSA身份認(rèn)證源碼\OpensslClient\Debug\OpensslClient.exe
?????文件?????361160??2019-01-22?11:18??openSSL\openssl?RSA身份認(rèn)證源碼\OpensslClient\Debug\OpensslClient.ilk
?????文件?????732160??2019-01-22?11:18??openSSL\openssl?RSA身份認(rèn)證源碼\OpensslClient\Debug\OpensslClient.pdb
?????文件??????????0??2019-02-01?13:53??openSSL\openssl?RSA身份認(rèn)證源碼\OpensslClient\Ecc_Cert\.rnd
?????文件????????712??2019-01-21?15:48??openSSL\openssl?RSA身份認(rèn)證源碼\OpensslClient\Ecc_Cert\ca.crt
?????文件????????428??2019-01-21?15:46??openSSL\openssl?RSA身份認(rèn)證源碼\OpensslClient\Ecc_Cert\ca.csr
?????文件????????310??2019-01-21?15:46??openSSL\openssl?RSA身份認(rèn)證源碼\OpensslClient\Ecc_Cert\ca.key
?????文件?????????42??2019-01-21?16:36??openSSL\openssl?RSA身份認(rèn)證源碼\OpensslClient\Ecc_Cert\ca.srl
?????文件????????602??2019-01-21?15:53??openSSL\openssl?RSA身份認(rèn)證源碼\OpensslClient\Ecc_Cert\client.crt
?????文件????????432??2019-01-21?15:53??openSSL\openssl?RSA身份認(rèn)證源碼\OpensslClient\Ecc_Cert\client.csr
?????文件????????310??2019-01-21?15:52??openSSL\openssl?RSA身份認(rèn)證源碼\OpensslClient\Ecc_Cert\client_ecc_private.pem
?????文件????????606??2019-01-21?16:36??openSSL\openssl?RSA身份認(rèn)證源碼\OpensslClient\Ecc_Cert\client_sm2.crt
?????文件????????440??2019-01-21?16:35??openSSL\openssl?RSA身份認(rèn)證源碼\OpensslClient\Ecc_Cert\client_sm2.csr
?????文件????????310??2019-01-21?16:35??openSSL\openssl?RSA身份認(rèn)證源碼\OpensslClient\Ecc_Cert\client_sm2_private.pem
?????文件????????598??2019-01-21?15:51??openSSL\openssl?RSA身份認(rèn)證源碼\OpensslClient\Ecc_Cert\server.crt
?????文件????????436??2019-01-21?15:51??openSSL\openssl?RSA身份認(rèn)證源碼\OpensslClient\Ecc_Cert\server.csr
?????文件????????310??2019-01-21?15:51??openSSL\openssl?RSA身份認(rèn)證源碼\OpensslClient\Ecc_Cert\server_ecc_private.pem
............此處省略491個(gè)文件信息
- 上一篇:時(shí)序分析法研究綜述
- 下一篇:1stopt破解版
評(píng)論
共有 條評(píng)論