ssl functionality wip
This commit is contained in:
parent
f78380afd4
commit
a274c99835
|
|
@ -19,8 +19,7 @@
|
||||||
|
|
||||||
HttpClient::HttpClient() {};
|
HttpClient::HttpClient() {};
|
||||||
|
|
||||||
std::pair<int, std::string>
|
std::pair<int, std::string> HttpClient::doGetRequest(const std::string &url, const std::unordered_map<std::string, std::string> &headers) {
|
||||||
HttpClient::doGetRequest(const std::string &url, const std::unordered_map<std::string, std::string> &headers) {
|
|
||||||
// https://stackoverflow.com/questions/25896916/parse-http-headers-in-c
|
// https://stackoverflow.com/questions/25896916/parse-http-headers-in-c
|
||||||
|
|
||||||
std::regex rgx{R"(^(?:((?:https?|s?ftp):)//)([^:/\s]+)(?::(\d*))?(?:/([^\s?#]+)?([?][^?#]*)?(#.*)?)?)"};
|
std::regex rgx{R"(^(?:((?:https?|s?ftp):)//)([^:/\s]+)(?::(\d*))?(?:/([^\s?#]+)?([?][^?#]*)?(#.*)?)?)"};
|
||||||
|
|
@ -125,7 +124,7 @@ std::string HttpClient::inetAddress(std::string hostname) {
|
||||||
int HttpClient::sslRecvPacket() {
|
int HttpClient::sslRecvPacket() {
|
||||||
ssl_read_packet.resize(4096);
|
ssl_read_packet.resize(4096);
|
||||||
ssl_read_packet.clear();
|
ssl_read_packet.clear();
|
||||||
|
|
||||||
int len = 16384;
|
int len = 16384;
|
||||||
char buf[len + 1];
|
char buf[len + 1];
|
||||||
do {
|
do {
|
||||||
|
|
@ -165,7 +164,7 @@ int HttpClient::sslSendPacket(std::string buf) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
int errr = SSL_get_error(ssl, len);
|
||||||
return buf.length();
|
return buf.length();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -178,6 +177,7 @@ int HttpClient::sslRequest(const std::string &server_name, const std::string &re
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// socket address
|
// socket address
|
||||||
std::string server_ip = inetAddress(server_name);
|
std::string server_ip = inetAddress(server_name);
|
||||||
struct sockaddr_in sa;
|
struct sockaddr_in sa;
|
||||||
|
|
@ -192,7 +192,7 @@ int HttpClient::sslRequest(const std::string &server_name, const std::string &re
|
||||||
printf("sslRequest, error connecting to server.\n");
|
printf("sslRequest, error connecting to server.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
SSL_library_init();
|
SSL_library_init();
|
||||||
SSLeay_add_ssl_algorithms();
|
SSLeay_add_ssl_algorithms();
|
||||||
SSL_load_error_strings();
|
SSL_load_error_strings();
|
||||||
|
|
@ -218,11 +218,12 @@ int HttpClient::sslRequest(const std::string &server_name, const std::string &re
|
||||||
}
|
}
|
||||||
|
|
||||||
// log cipher
|
// log cipher
|
||||||
// printf ("SSL connection using %s\n", SSL_get_cipher (ssl));
|
printf ("SSL connection using %s\n", SSL_get_cipher (ssl));
|
||||||
|
ShowCerts(ssl);
|
||||||
|
|
||||||
// send request
|
// send request
|
||||||
//std::err << request << std::endl;
|
// std::out << request << std::endl;
|
||||||
sslSendPacket(request);
|
int written_bytes = sslSendPacket(request);
|
||||||
|
|
||||||
// read response and return its length
|
// read response and return its length
|
||||||
return sslRecvPacket();
|
return sslRecvPacket();
|
||||||
|
|
@ -237,3 +238,25 @@ void HttpClient::log_ssl() {
|
||||||
std::cerr << str << std::endl;
|
std::cerr << str << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void HttpClient::ShowCerts(SSL* ssl)
|
||||||
|
{ X509 *cert;
|
||||||
|
char *line;
|
||||||
|
|
||||||
|
cert = SSL_get_peer_certificate(ssl); /* get the server's certificate */
|
||||||
|
if ( cert != NULL )
|
||||||
|
{
|
||||||
|
printf("Server certificates:\n");
|
||||||
|
line = X509_NAME_oneline(X509_get_subject_name(cert), 0, 0);
|
||||||
|
printf("Subject: %s\n", line);
|
||||||
|
free(line); /* free the malloc'ed string */
|
||||||
|
line = X509_NAME_oneline(X509_get_issuer_name(cert), 0, 0);
|
||||||
|
printf("Issuer: %s\n", line);
|
||||||
|
free(line); /* free the malloc'ed string */
|
||||||
|
X509_free(cert); /* free the malloc'ed certificate copy */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf("No certificates.\n");
|
||||||
|
}
|
||||||
|
|
@ -34,4 +34,5 @@ private:
|
||||||
int sslRequest(const std::string &server_name, const std::string &request);
|
int sslRequest(const std::string &server_name, const std::string &request);
|
||||||
|
|
||||||
void log_ssl();
|
void log_ssl();
|
||||||
|
void ShowCerts(SSL* ssl);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue