-
This commit is contained in:
parent
ee3003e2d6
commit
d668bf59ec
16
certifikaty/vygenerovany_certifikat.pem
Normal file
16
certifikaty/vygenerovany_certifikat.pem
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICcTCCAdqgAwIBAgIQCOhPCtiT+OzqOZ9/zm15UDANBgkqhkiG9w0BAQsFADBz
|
||||||
|
MQswCQYDVQQGEwJTSzEKMAgGA1UECAwBLTEPMA0GA1UEBwwGS29zaWNlMREwDwYD
|
||||||
|
VQQKDAhBdXRvcml0YTESMBAGA1UEAwwJbG9jYWwuZGV2MSAwHgYJKoZIhvcNAQkB
|
||||||
|
FhFhdXRvcml0YUB0dWtlLmNvbTAiGA8yMDIwMDMxMTE0NTY0MloYDzIwMjUwMzEx
|
||||||
|
MTQ1NjQyWjB3MQswCQYDVQQGEwJTUjEKMAgGA1UECAwBLTEPMA0GA1UEBwwGS29z
|
||||||
|
aWNlMQowCAYDVQQKDAEtMQowCAYDVQQLDAEtMRIwEAYDVQQDDAlTZXJ2ZXIuc2sx
|
||||||
|
HzAdBgkqhkiG9w0BCQEWEHNlcnZlckBzZXJ2ZXIuc2swgZ8wDQYJKoZIhvcNAQEB
|
||||||
|
BQADgY0AMIGJAoGBAN9gCoWWm5DDSo/7cSTbzhfbWsInC1kqj+5JKUy264iFbCnu
|
||||||
|
lcmD4w6EfClH5RYnqg+dHxuft2yEo0SvAMRyFpPs+J30m3m6TyLSAtTkoqYARFA3
|
||||||
|
UcMm1mGFPHfeJIWnJXSFMVEixrY8xy2PoHjBiB90MqcsEJBNRgeGiLDsJFmVAgMB
|
||||||
|
AAEwDQYJKoZIhvcNAQELBQADgYEAYKUghhJs93klzeFlJVArHPpUyuYcIAsre6B9
|
||||||
|
5opSgCyhztxUoRYp/ti+QnnyCPK6EuYzwFRY6KRAsBM2w1bSaK3qmtMQmoANK/n1
|
||||||
|
tD6FravK9ufb760hsB659iiKJrKFqZcQD34f0rjhIImBscK4KKMp8wmesBUxVidG
|
||||||
|
HsHDRKM=
|
||||||
|
-----END CERTIFICATE-----
|
15
certifikaty/vygenerovany_kluc.key
Normal file
15
certifikaty/vygenerovany_kluc.key
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIICXgIBAAKBgQDfYAqFlpuQw0qP+3Ek284X21rCJwtZKo/uSSlMtuuIhWwp7pXJ
|
||||||
|
g+MOhHwpR+UWJ6oPnR8bn7dshKNErwDEchaT7Pid9Jt5uk8i0gLU5KKmAERQN1HD
|
||||||
|
JtZhhTx33iSFpyV0hTFRIsa2PMctj6B4wYgfdDKnLBCQTUYHhoiw7CRZlQIDAQAB
|
||||||
|
AoGAEal1zjAapFS2D6eSv8FBLN87Wvh8hqQdeyVIm/LRsaV/vYVfzW4oH6TSRBmr
|
||||||
|
GjhFfim5r4o5K14wd6o7uLde+VTy/eJhS0xNtHDyfrAsg0Eb3EleS/D6SrX81err
|
||||||
|
vCXxC9DScOsCxuI0KIzzWdy9pB4yAfpN1S7SZ/BcOJwm3mECQQD79TbvsVO3buce
|
||||||
|
I5V31SkvYA7ZhGj9e5hHosoENzxW/DLK2rJTkfJ5gA19Toiyy3Y+aEFOeJ/EZuje
|
||||||
|
aIE8WKNhAkEA4vVwHZhCUGelWtfzN6K2bPxYITOhCE4eDAKbSsRl8g9sRzrjuFoW
|
||||||
|
5VwCj3yAz5Axe5tRI18kzI6Si89l6H6WtQJBAKAKFicSH/b3/t3qBFrljw+EmGoZ
|
||||||
|
7QZ1pzh5cpBS9YTbFPg9CeCDZ909NVROug23pxfk6PaLMBB0vZ3oC47lToECQQDO
|
||||||
|
z4ZNgXwUFo4n/JZFgUCoiT2pa4l2rvBUU1+8vsCC1aj+M1xklbs9Xx16MKKUAToF
|
||||||
|
/57tE3rN57EEM4YSWJ/tAkEAh1FG42L+UNVEXc88S6419iDpCkFzdu6Fl+tghASc
|
||||||
|
Re0kEW6wMYtV9HKPCnHWymklB6YbaaeEUomOe5d1Bw8O4A==
|
||||||
|
-----END RSA PRIVATE KEY-----
|
@ -3,7 +3,7 @@
|
|||||||
// Meno studenta: Tomas Lukac //
|
// Meno studenta: Tomas Lukac //
|
||||||
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
||||||
// Skola: KEMT FEI TUKE //
|
// Skola: KEMT FEI TUKE //
|
||||||
// Datum poslednej upravy: 9.3.2020 //
|
// Datum poslednej upravy: 12.3.2020 //
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "komunikacia.h"
|
#include "komunikacia.h"
|
||||||
@ -11,7 +11,15 @@
|
|||||||
|
|
||||||
int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, char* cesta)
|
int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, char* cesta)
|
||||||
{
|
{
|
||||||
wolfSSL_write(ssl, cesta, 64);
|
int uspech;
|
||||||
|
|
||||||
|
//odoslanie nazvu (resp. cesty) suboru
|
||||||
|
uspech = wolfSSL_write(ssl, cesta, VELKOST_CESTY);
|
||||||
|
if(uspech <= 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Nastala chyba pri posielani dat o subore.\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
FILE* subor = fopen(cesta, "r");
|
FILE* subor = fopen(cesta, "r");
|
||||||
if(subor == NULL)
|
if(subor == NULL)
|
||||||
@ -28,10 +36,10 @@ int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, char* cesta)
|
|||||||
//a zisti velkost suboru
|
//a zisti velkost suboru
|
||||||
fseek(subor, 0, SEEK_END);
|
fseek(subor, 0, SEEK_END);
|
||||||
long velkost = ftell(subor);
|
long velkost = ftell(subor);
|
||||||
char velkost_suboru[32];
|
char velkost_suboru[VELKOST_SUBOR];
|
||||||
sprintf(velkost_suboru, "%ld", velkost);
|
sprintf(velkost_suboru, "%ld", velkost);
|
||||||
printf("Velkost suboru: %s bajtov\n", velkost_suboru);
|
printf("Velkost suboru: %s bajtov\n", velkost_suboru);
|
||||||
wolfSSL_write(ssl, velkost_suboru, 32);
|
wolfSSL_write(ssl, velkost_suboru, VELKOST_SUBOR);
|
||||||
|
|
||||||
//nastavi ukazovatel na zaciatok suboru
|
//nastavi ukazovatel na zaciatok suboru
|
||||||
//a nacita data zo suboru do pola
|
//a nacita data zo suboru do pola
|
||||||
@ -41,10 +49,25 @@ int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, char* cesta)
|
|||||||
fread(pole, 1, velkost, subor);
|
fread(pole, 1, velkost, subor);
|
||||||
fclose(subor);
|
fclose(subor);
|
||||||
|
|
||||||
|
//generovanie a poslanie kontrolneho suctu serveru pre kontrolu
|
||||||
|
byte* hash;
|
||||||
|
hash = generovat_hash(cesta);
|
||||||
|
wolfSSL_write(ssl, hash, VELKOST_HASHU);
|
||||||
|
if(uspech <= 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Nastala chyba pri posielani hashu.\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
//posielanie jednotlivych bajtov
|
//posielanie jednotlivych bajtov
|
||||||
for(int i = 0; i < velkost + 1; ++i)
|
for(int i = 0; i < velkost + 1; ++i)
|
||||||
{
|
{
|
||||||
wolfSSL_write(ssl, pole_uk, velkost);
|
wolfSSL_write(ssl, pole_uk, velkost);
|
||||||
|
if(uspech <= 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Nastala chyba pri posielani suboru.\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
pole_uk += 1;
|
pole_uk += 1;
|
||||||
}
|
}
|
||||||
printf("Subor bol uspesne odoslany.\n");
|
printf("Subor bol uspesne odoslany.\n");
|
||||||
@ -54,13 +77,21 @@ int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, char* cesta)
|
|||||||
|
|
||||||
int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx)
|
int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx)
|
||||||
{
|
{
|
||||||
char* cesta = calloc(100, sizeof(char));
|
int uspech;
|
||||||
wolfSSL_read(ssl, cesta, 64);
|
|
||||||
|
//prijem dat o velkosti suboru
|
||||||
|
char* cesta = calloc(VELKOST_CESTY, sizeof(char));
|
||||||
|
uspech = wolfSSL_read(ssl, cesta, VELKOST_CESTY);
|
||||||
|
if(uspech <= 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Nastala chyba pri prijati velkosti suboru\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
printf("Prebieha prijimanie suboru %s\n", cesta);
|
printf("Prebieha prijimanie suboru %s\n", cesta);
|
||||||
|
|
||||||
//ziskanie informacie od klienta o velkosti odoslaneho suboru
|
//ziskanie informacie od klienta o velkosti odoslaneho suboru
|
||||||
char velkost_suboru[32];
|
char velkost_suboru[32];
|
||||||
wolfSSL_read(ssl, velkost_suboru, 32);
|
wolfSSL_read(ssl, velkost_suboru, VELKOST_SUBOR);
|
||||||
long velkost = atol(velkost_suboru);
|
long velkost = atol(velkost_suboru);
|
||||||
if(velkost < 1)
|
if(velkost < 1)
|
||||||
{
|
{
|
||||||
@ -72,16 +103,43 @@ int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx)
|
|||||||
printf("Velkost suboru: %s bajtov\n", velkost_suboru);
|
printf("Velkost suboru: %s bajtov\n", velkost_suboru);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//prijem hashu, ktory vypocital server
|
||||||
|
char* prijaty_hash = calloc(VELKOST_HASHU, sizeof(char));
|
||||||
|
uspech = wolfSSL_read(ssl, prijaty_hash, VELKOST_HASHU);
|
||||||
|
if(uspech <= 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Nastala chyba pri prijati hashu\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
//prijem jednotlivych bajtov
|
//prijem jednotlivych bajtov
|
||||||
char* pole = malloc(velkost);
|
char* pole = malloc(velkost);
|
||||||
char* pole_uk = pole;
|
char* pole_uk = pole;
|
||||||
for(int i = 0; i < velkost + 1; ++i)
|
for(int i = 0; i < velkost + 1; ++i)
|
||||||
{
|
{
|
||||||
wolfSSL_read(ssl, pole_uk, velkost);
|
uspech = wolfSSL_read(ssl, pole_uk, velkost);
|
||||||
|
if(uspech <= 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Nastala chyba pri prijimani suboru\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
pole_uk += 1;
|
pole_uk += 1;
|
||||||
}
|
}
|
||||||
printf("Subor bol uspesne prijaty.\n");
|
printf("Subor bol uspesne prijaty.\n");
|
||||||
|
|
||||||
|
//kontrola ci sa prijaty a vypocitany kontrolny sucet suboru zhoduju
|
||||||
|
byte* vypocitany_hash;
|
||||||
|
vypocitany_hash = generovat_hash(cesta);
|
||||||
|
if(!strcmp(prijaty_hash, (char*)vypocitany_hash))
|
||||||
|
{
|
||||||
|
printf("Subor prisiel v poriadku.\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("Subor neprisiel v poriadku.\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
//zapis nacitanych dat do suboru
|
//zapis nacitanych dat do suboru
|
||||||
FILE* subor = fopen(cesta, "w");
|
FILE* subor = fopen(cesta, "w");
|
||||||
fwrite(pole, 1, velkost, subor);
|
fwrite(pole, 1, velkost, subor);
|
||||||
@ -186,7 +244,10 @@ int cakat_na_komunikaciu(int cislo_portu)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(listen(cislo_soketu, 10) != 0)
|
//maximalna velkost do ktorej rada cakajucich spojeni pre soket moze rast
|
||||||
|
int velkost_radu = 10;
|
||||||
|
|
||||||
|
if(listen(cislo_soketu, velkost_radu) != 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Na danom porte nie je mozne cakat na komunikaciu.\n");
|
fprintf(stderr, "Na danom porte nie je mozne cakat na komunikaciu.\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
// Meno studenta: Tomas Lukac //
|
// Meno studenta: Tomas Lukac //
|
||||||
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
||||||
// Skola: KEMT FEI TUKE //
|
// Skola: KEMT FEI TUKE //
|
||||||
// Datum poslednej upravy: 9.3.2020 //
|
// Datum poslednej upravy: 12.3.2020 //
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#ifndef __KOMUNIKACIA_H__
|
#ifndef __KOMUNIKACIA_H__
|
||||||
@ -14,6 +14,10 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <wolfssl/ssl.h>
|
#include <wolfssl/ssl.h>
|
||||||
|
|
||||||
|
#define VELKOST_CESTY 64 //velkost retazca, kt. uklada lokaciu suboru
|
||||||
|
#define VELKOST_SUBOR 32 //velkost retazca, kt. uklada velkost prenasaneho suboru
|
||||||
|
#define VELKOST_HASHU 20
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
//makro ktore urcuje win distribuciu ak nieje detekovana
|
//makro ktore urcuje win distribuciu ak nieje detekovana
|
||||||
#ifndef _WIN32_WINNT
|
#ifndef _WIN32_WINNT
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
// Meno studenta: Tomas Lukac //
|
// Meno studenta: Tomas Lukac //
|
||||||
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
||||||
// Skola: KEMT FEI TUKE //
|
// Skola: KEMT FEI TUKE //
|
||||||
// Datum poslednej upravy: 9.3.2020 //
|
// Datum poslednej upravy: 12.3.2020 //
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "kryptografia.h"
|
#include "kryptografia.h"
|
||||||
@ -14,7 +14,7 @@ WOLFSSL_CTX* nastavit_ctx_klient()
|
|||||||
wolfSSL_Init();
|
wolfSSL_Init();
|
||||||
method = wolfTLSv1_2_client_method();
|
method = wolfTLSv1_2_client_method();
|
||||||
WOLFSSL_CTX *ctx = wolfSSL_CTX_new(method);
|
WOLFSSL_CTX *ctx = wolfSSL_CTX_new(method);
|
||||||
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, 0);
|
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
|
||||||
if (ctx == NULL)
|
if (ctx == NULL)
|
||||||
{
|
{
|
||||||
printf("Nepodarilo sa inicializovat WOLFSSL_CTX\n");
|
printf("Nepodarilo sa inicializovat WOLFSSL_CTX\n");
|
||||||
@ -29,8 +29,8 @@ WOLFSSL_CTX* nastavit_ctx_server()
|
|||||||
wolfSSL_Init();
|
wolfSSL_Init();
|
||||||
method = wolfTLSv1_2_server_method();
|
method = wolfTLSv1_2_server_method();
|
||||||
WOLFSSL_CTX *ctx = wolfSSL_CTX_new(method);
|
WOLFSSL_CTX *ctx = wolfSSL_CTX_new(method);
|
||||||
|
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
|
||||||
|
|
||||||
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
|
|
||||||
if (ctx == NULL)
|
if (ctx == NULL)
|
||||||
{
|
{
|
||||||
printf("Nepodarilo sa inicializovat WOLFSSL_CTX\n");
|
printf("Nepodarilo sa inicializovat WOLFSSL_CTX\n");
|
||||||
@ -49,21 +49,21 @@ void zobraz_sifru(WOLFSSL* ssl)
|
|||||||
printf ("Pouzita sifra: %s\n", wolfSSL_get_cipher(ssl));
|
printf ("Pouzita sifra: %s\n", wolfSSL_get_cipher(ssl));
|
||||||
}
|
}
|
||||||
|
|
||||||
int generovat_rsa_certifikat(WOLFSSL_CTX* ctx, int pocet_bitov, int exponent, int algoritmus, char* krajina, char* mesto, char* domena, char* email)
|
int generovat_rsa_certifikat(int pocet_bitov, int exponent, int algoritmus, char* krajina, char* mesto, char* domena, char* email)
|
||||||
{
|
{
|
||||||
int uspech;
|
int uspech;
|
||||||
|
|
||||||
//premenne pre ukladanie dat autority
|
//premenne pre ukladanie dat autority
|
||||||
RsaKey kluc_autorita;
|
RsaKey kluc_autorita;
|
||||||
byte pem_autorita[4096];
|
byte pem_autorita[VELKOST_BUFFERA];
|
||||||
word32 pem_autorita_velkost;
|
word32 pem_autorita_velkost;
|
||||||
byte der_autorita[4096];
|
byte der_autorita[VELKOST_BUFFERA];
|
||||||
word32 der_autorita_velkost;
|
word32 der_autorita_velkost;
|
||||||
|
|
||||||
//vytvorenie struktury RsaKey autority zo sukromneho kluca vo formate PEM ulozeneho v subore certifikaty/autorita.key
|
//vytvorenie struktury RsaKey autority zo sukromneho kluca vo formate PEM ulozeneho v subore certifikaty/autorita.key
|
||||||
memset(pem_autorita, 0, sizeof(pem_autorita));
|
memset(pem_autorita, 0, sizeof(pem_autorita));
|
||||||
FILE* subor = fopen("../certifikaty/autorita_rsa.key", "rb");
|
FILE* subor = fopen("../certifikaty/autorita_rsa.key", "rb");
|
||||||
pem_autorita_velkost = fread(pem_autorita, 1, 4096, subor);
|
pem_autorita_velkost = fread(pem_autorita, 1, VELKOST_BUFFERA, subor);
|
||||||
if(pem_autorita_velkost < 0)
|
if(pem_autorita_velkost < 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Nepodarilo sa nacitat obsah suboru\n");
|
fprintf(stderr, "Nepodarilo sa nacitat obsah suboru\n");
|
||||||
@ -91,9 +91,9 @@ int generovat_rsa_certifikat(WOLFSSL_CTX* ctx, int pocet_bitov, int exponent, in
|
|||||||
|
|
||||||
//premenne pre ukladanie dat vygenerovaneho kluca
|
//premenne pre ukladanie dat vygenerovaneho kluca
|
||||||
RsaKey kluc;
|
RsaKey kluc;
|
||||||
byte der_kluc[4096];
|
byte der_kluc[VELKOST_BUFFERA];
|
||||||
word32 der_kluc_velkost;
|
word32 der_kluc_velkost;
|
||||||
byte pem_kluc[4096];
|
byte pem_kluc[VELKOST_BUFFERA];
|
||||||
word32 pem_kluc_velkost;
|
word32 pem_kluc_velkost;
|
||||||
|
|
||||||
//vygenerovanie kluca
|
//vygenerovanie kluca
|
||||||
@ -110,6 +110,7 @@ int generovat_rsa_certifikat(WOLFSSL_CTX* ctx, int pocet_bitov, int exponent, in
|
|||||||
fprintf(stderr, "Nastala chyba pri vytvoreni suboru DER so sukromnym klucom.\n");
|
fprintf(stderr, "Nastala chyba pri vytvoreni suboru DER so sukromnym klucom.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
memset(pem_kluc, 0, sizeof(pem_kluc));
|
||||||
pem_kluc_velkost = wc_DerToPem(der_kluc, der_kluc_velkost, pem_kluc, sizeof(pem_kluc), PRIVATEKEY_TYPE);
|
pem_kluc_velkost = wc_DerToPem(der_kluc, der_kluc_velkost, pem_kluc, sizeof(pem_kluc), PRIVATEKEY_TYPE);
|
||||||
if(pem_kluc_velkost < 0)
|
if(pem_kluc_velkost < 0)
|
||||||
{
|
{
|
||||||
@ -117,21 +118,18 @@ int generovat_rsa_certifikat(WOLFSSL_CTX* ctx, int pocet_bitov, int exponent, in
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//nacitanie vygenerovaneho kluca do WOLFSSL_CTX struktury
|
//zapis vygenerovaneho klucu do suboru
|
||||||
uspech = wolfSSL_CTX_use_PrivateKey_buffer(ctx, pem_kluc, pem_kluc_velkost, SSL_FILETYPE_PEM);
|
subor = fopen("../certifikaty/vygenerovany_kluc.key", "wb");
|
||||||
if(uspech != SSL_SUCCESS)
|
fwrite(pem_kluc, 1, pem_kluc_velkost, subor);
|
||||||
{
|
fclose(subor);
|
||||||
fprintf(stderr, "Chyba pri nacitani vygenerovaneho kluca.\nCislo chyby: %d\nDovod chyby: %s\n", uspech, wc_GetErrorString(uspech));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("RSA kluc bol uspesne vygenerovany a nacitany.\n");
|
printf("RSA kluc bol uspesne vygenerovany.\n");
|
||||||
|
|
||||||
//premenne pre ukladanie dat certifikatu
|
//premenne pre ukladanie dat certifikatu
|
||||||
Cert certifikat;
|
Cert certifikat;
|
||||||
byte der_certifikat[4096];
|
byte der_certifikat[VELKOST_BUFFERA];
|
||||||
word32 der_certifikat_velkost;
|
word32 der_certifikat_velkost;
|
||||||
byte pem_certifikat[4096];
|
byte pem_certifikat[VELKOST_BUFFERA];
|
||||||
word32 pem_certifikat_velkost;
|
word32 pem_certifikat_velkost;
|
||||||
|
|
||||||
//vygenerovanie a podpis certifikatu
|
//vygenerovanie a podpis certifikatu
|
||||||
@ -143,8 +141,9 @@ int generovat_rsa_certifikat(WOLFSSL_CTX* ctx, int pocet_bitov, int exponent, in
|
|||||||
strncpy(certifikat.subject.unit, "-", CTC_NAME_SIZE);
|
strncpy(certifikat.subject.unit, "-", CTC_NAME_SIZE);
|
||||||
strncpy(certifikat.subject.commonName, domena, CTC_NAME_SIZE);
|
strncpy(certifikat.subject.commonName, domena, CTC_NAME_SIZE);
|
||||||
strncpy(certifikat.subject.email, email, CTC_NAME_SIZE);
|
strncpy(certifikat.subject.email, email, CTC_NAME_SIZE);
|
||||||
//certifikat.isCA = 0;
|
certifikat.isCA = 0;
|
||||||
certifikat.sigType = algoritmus;
|
certifikat.sigType = algoritmus;
|
||||||
|
certifikat.daysValid = 1825;
|
||||||
uspech = wc_SetIssuer(&certifikat, "../certifikaty/autorita_rsa.pem");
|
uspech = wc_SetIssuer(&certifikat, "../certifikaty/autorita_rsa.pem");
|
||||||
if(uspech < 0)
|
if(uspech < 0)
|
||||||
{
|
{
|
||||||
@ -171,38 +170,35 @@ int generovat_rsa_certifikat(WOLFSSL_CTX* ctx, int pocet_bitov, int exponent, in
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//nacitanie vygenerovaneho certifikatu do WOLFSSL_CTX struktury
|
//zapis vygenerovaneho klucu do suboru
|
||||||
uspech = wolfSSL_CTX_use_certificate_buffer(ctx, pem_certifikat, pem_certifikat_velkost, SSL_FILETYPE_PEM);
|
subor = fopen("../certifikaty/vygenerovany_certifikat.pem", "wb");
|
||||||
if(uspech != SSL_SUCCESS)
|
fwrite(pem_certifikat, 1, pem_certifikat_velkost, subor);
|
||||||
{
|
fclose(subor);
|
||||||
fprintf(stderr, "Chyba pri generovani certifikatu.\nCislo chyby: %d\nDovod chyby: %s\n", uspech, wc_GetErrorString(uspech));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
printf("Certifikat bol uspesne vygenerovany a podpisany\n");
|
|
||||||
|
|
||||||
if(!wolfSSL_CTX_check_private_key(ctx))
|
printf("Certifikat bol uspesne vygenerovany\n");
|
||||||
{
|
|
||||||
fprintf(stderr, "Sukromny kluc sa nezhoduje s certifikatom\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int generovat_ecc_certifikat(WOLFSSL_CTX* ctx, int pocet_bitov, ecc_curve_id kluc_krivka, int algoritmus, char* krajina, char* mesto, char* domena, char* email)
|
int generovat_ecc_certifikat(int pocet_bitov, ecc_curve_id kluc_krivka, int algoritmus, char* krajina, char* mesto, char* domena, char* email)
|
||||||
{
|
{
|
||||||
int uspech = 0;
|
int uspech = 0 ;
|
||||||
|
|
||||||
//premenne pre ukladanie dat autority
|
//premenne pre ukladanie dat autority
|
||||||
ecc_key kluc_autorita;
|
ecc_key kluc_autorita;
|
||||||
byte pem_autorita[4096];
|
byte pem_autorita[VELKOST_BUFFERA];
|
||||||
byte der_autorita[4096];
|
word32 pem_autorita_velkost;
|
||||||
|
byte der_autorita[VELKOST_BUFFERA];
|
||||||
word32 der_autorita_velkost;
|
word32 der_autorita_velkost;
|
||||||
|
|
||||||
//vytvorenie struktury ecc_key autority zo sukromneho kluca vo formate PEM ulozeneho v subore certifikaty/autorita_ecc.key
|
//vytvorenie struktury ecc_key autority zo sukromneho kluca vo formate PEM ulozeneho v subore certifikaty/autorita_ecc.key
|
||||||
memset(pem_autorita, 0, sizeof(pem_autorita));
|
memset(pem_autorita, 0, sizeof(pem_autorita));
|
||||||
FILE* subor = fopen("../certifikaty/autorita_ecc.key", "rb");
|
FILE* subor = fopen("../certifikaty/autorita_ecc.key", "rb");
|
||||||
fread(pem_autorita, 1, 4096 , subor);
|
pem_autorita_velkost = fread(pem_autorita, 1, VELKOST_BUFFERA , subor);
|
||||||
|
if(pem_autorita_velkost < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Nepodarilo sa nacitat obsah suboru\n");
|
||||||
|
}
|
||||||
fclose(subor);
|
fclose(subor);
|
||||||
word32 index = 0; //nastavi odkial zacat citat buffer
|
word32 index = 0; //nastavi odkial zacat citat buffer
|
||||||
der_autorita_velkost = wolfSSL_KeyPemToDer(pem_autorita, sizeof(pem_autorita), der_autorita, sizeof(der_autorita), "");
|
der_autorita_velkost = wolfSSL_KeyPemToDer(pem_autorita, sizeof(pem_autorita), der_autorita, sizeof(der_autorita), "");
|
||||||
@ -220,9 +216,9 @@ int generovat_ecc_certifikat(WOLFSSL_CTX* ctx, int pocet_bitov, ecc_curve_id klu
|
|||||||
|
|
||||||
//premenne pre ukladanie dat vygenerovaneho kluca
|
//premenne pre ukladanie dat vygenerovaneho kluca
|
||||||
ecc_key kluc;
|
ecc_key kluc;
|
||||||
byte der_kluc[4096];
|
byte der_kluc[VELKOST_BUFFERA];
|
||||||
word32 der_kluc_velkost;
|
word32 der_kluc_velkost;
|
||||||
byte pem_kluc[4096];
|
byte pem_kluc[VELKOST_BUFFERA];
|
||||||
word32 pem_kluc_velkost;
|
word32 pem_kluc_velkost;
|
||||||
|
|
||||||
//vygenerovanie kluca
|
//vygenerovanie kluca
|
||||||
@ -234,23 +230,30 @@ int generovat_ecc_certifikat(WOLFSSL_CTX* ctx, int pocet_bitov, ecc_curve_id klu
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
der_kluc_velkost = wc_EccKeyToDer(&kluc, der_kluc, sizeof(der_kluc));
|
der_kluc_velkost = wc_EccKeyToDer(&kluc, der_kluc, sizeof(der_kluc));
|
||||||
pem_kluc_velkost = wc_DerToPem(der_kluc, der_kluc_velkost, pem_kluc, sizeof(pem_kluc), ECC_PRIVATEKEY_TYPE);
|
if(der_kluc_velkost < 0)
|
||||||
|
|
||||||
//nacitanie vygenerovaneho kluca do WOLFSSL_CTX struktury
|
|
||||||
uspech = wolfSSL_CTX_use_PrivateKey_buffer(ctx, pem_kluc, pem_kluc_velkost, SSL_FILETYPE_PEM);
|
|
||||||
if(uspech != SSL_SUCCESS)
|
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Chyba pri nacitani vygenerovaneho kluca.\nCislo chyby: %d\nDovod chyby: %s\n", uspech, wc_GetErrorString(uspech));
|
fprintf(stderr, "Nastala chyba pri vytvoreni suboru DER so sukromnym klucom.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
pem_kluc_velkost = wc_DerToPem(der_kluc, der_kluc_velkost, pem_kluc, sizeof(pem_kluc), ECC_PRIVATEKEY_TYPE);
|
||||||
|
if(pem_kluc_velkost < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Nastala chyba pri vytvoreni suboru PEM so sukromnym klucom\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//zapis vygenerovaneho kluca do suboru
|
||||||
|
subor = fopen("../certifikaty/vygenerovany_kluc.key", "wb");
|
||||||
|
fwrite(pem_kluc, 1, pem_kluc_velkost, subor);
|
||||||
|
fclose(subor);
|
||||||
|
|
||||||
printf("ECC kluc bol uspesne vygenerovany a nacitany.\n");
|
printf("ECC kluc bol uspesne vygenerovany a nacitany.\n");
|
||||||
|
|
||||||
//premenne pre ukladanie dat certifikatu
|
//premenne pre ukladanie dat certifikatu
|
||||||
Cert certifikat;
|
Cert certifikat;
|
||||||
byte der_certifikat[4096];
|
byte der_certifikat[VELKOST_BUFFERA];
|
||||||
word32 der_certifikat_velkost;
|
word32 der_certifikat_velkost;
|
||||||
byte pem_certifikat[4096];
|
byte pem_certifikat[VELKOST_BUFFERA];
|
||||||
word32 pem_certifikat_velkost;
|
word32 pem_certifikat_velkost;
|
||||||
|
|
||||||
//vygenerovanie a podpis certifikatu
|
//vygenerovanie a podpis certifikatu
|
||||||
@ -264,6 +267,8 @@ int generovat_ecc_certifikat(WOLFSSL_CTX* ctx, int pocet_bitov, ecc_curve_id klu
|
|||||||
strncpy(certifikat.subject.email, email, CTC_NAME_SIZE);
|
strncpy(certifikat.subject.email, email, CTC_NAME_SIZE);
|
||||||
certifikat.isCA = 0;
|
certifikat.isCA = 0;
|
||||||
certifikat.sigType = algoritmus;
|
certifikat.sigType = algoritmus;
|
||||||
|
certifikat.daysValid = 1825;
|
||||||
|
|
||||||
uspech = wc_SetIssuer(&certifikat, "../certifikaty/autorita_ecc.pem");
|
uspech = wc_SetIssuer(&certifikat, "../certifikaty/autorita_ecc.pem");
|
||||||
if(uspech != 0)
|
if(uspech != 0)
|
||||||
{
|
{
|
||||||
@ -290,20 +295,11 @@ int generovat_ecc_certifikat(WOLFSSL_CTX* ctx, int pocet_bitov, ecc_curve_id klu
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//nacitanie vygenerovaneho certifikatu do WOLFSSL_CTX struktury
|
//zapis vygenerovaneho klucu do suboru
|
||||||
uspech = wolfSSL_CTX_use_certificate_buffer(ctx, pem_certifikat, pem_certifikat_velkost, SSL_FILETYPE_PEM);
|
subor = fopen("../certifikaty/vygenerovany_certifikat.pem", "wb");
|
||||||
if(uspech != SSL_SUCCESS)
|
fwrite(pem_certifikat, 1, pem_certifikat_velkost, subor);
|
||||||
{
|
fclose(subor);
|
||||||
fprintf(stderr, "Chyba pri generovani certifikatu.\nCislo chyby: %d\nDovod chyby: %s\n", uspech, wc_GetErrorString(uspech));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
printf("Certifikat bol uspesne vygenerovany a podpisany\n");
|
|
||||||
|
|
||||||
if(!wolfSSL_CTX_check_private_key(ctx))
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Sukromny kluc sa nezhoduje s certifikatom\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -360,6 +356,19 @@ void zobraz_certifikat(WOLFSSL* ssl)
|
|||||||
X509_free(certifikat);
|
X509_free(certifikat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
byte* generovat_hash(char* cesta)
|
||||||
|
{
|
||||||
|
int pocet_bajtov;
|
||||||
|
FILE* subor = fopen(cesta, "rb");
|
||||||
|
unsigned char data[1024];
|
||||||
|
byte* vysledok = calloc(SHA_DIGEST_SIZE, sizeof(byte));
|
||||||
|
Sha sha;
|
||||||
|
wc_InitSha(&sha);
|
||||||
|
while ((pocet_bajtov = fread (data, 1, 1024, subor)) != 0)
|
||||||
|
wc_ShaUpdate(&sha, data, pocet_bajtov);
|
||||||
|
wc_ShaFinal(&sha, vysledok);
|
||||||
|
return vysledok;
|
||||||
|
}
|
||||||
|
|
||||||
void ukoncit_spojenie(WOLFSSL *ssl, WOLFSSL_CTX *ctx)
|
void ukoncit_spojenie(WOLFSSL *ssl, WOLFSSL_CTX *ctx)
|
||||||
{
|
{
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
// Meno studenta: Tomas Lukac //
|
// Meno studenta: Tomas Lukac //
|
||||||
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
||||||
// Skola: KEMT FEI TUKE //
|
// Skola: KEMT FEI TUKE //
|
||||||
// Datum poslednej upravy: 9.3.2020 //
|
// Datum poslednej upravy: 12.3.2020 //
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#ifndef __KRYPTOGRAFIA_H__
|
#ifndef __KRYPTOGRAFIA_H__
|
||||||
@ -16,9 +16,36 @@
|
|||||||
#include <wolfssl/wolfcrypt/rsa.h>
|
#include <wolfssl/wolfcrypt/rsa.h>
|
||||||
#include <wolfssl/wolfcrypt/asn_public.h>
|
#include <wolfssl/wolfcrypt/asn_public.h>
|
||||||
#include <wolfssl/wolfcrypt/error-crypt.h>
|
#include <wolfssl/wolfcrypt/error-crypt.h>
|
||||||
|
#include <wolfssl/wolfcrypt/sha.h>
|
||||||
|
|
||||||
int generovat_ecc_certifikat(WOLFSSL_CTX* ctx, int pocet_bitov, ecc_curve_id kluc_krivka, int algoritmus, char* krajina, char* mesto, char* domena, char* email);
|
#define VELKOST_BUFFERA 4096
|
||||||
int generovat_rsa_certifikat(WOLFSSL_CTX* ctx, int pocet_bitov, int exponent, int algoritmus, char* krajina, char* mesto, char* domena, char* email);
|
|
||||||
|
/**
|
||||||
|
* generovat_hash: realizuje vypocet kontrolneho suctu zo suboru, ktoreho lokacia je predana v argumente
|
||||||
|
* @parameter char* cesta : lokacia suboru
|
||||||
|
* @vrati smernik na vygenerovany hash
|
||||||
|
*/
|
||||||
|
byte* generovat_hash(char* cesta);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* generovat_ecc_certifikat: realizuje vygenerovania sukromneho kluca, nacitanie sukromneho kluca autority,
|
||||||
|
* vygenerovanie a podpis ecc certifikatu pomocou sukromneho kluca a certifikatu autority
|
||||||
|
* @parameter int pocet_bitov : velkost kluca
|
||||||
|
* @parameter ecc-curve_id kluc_krivka: kod krivky pre generovanie sukromneho kluca
|
||||||
|
* @parameter int algoritmus: kod algoritmu, sluziaceho na vymenu klucov
|
||||||
|
* @vrati int: operacia bola uspesna(0), neuspesna(-1)
|
||||||
|
*/
|
||||||
|
int generovat_ecc_certifikat(int pocet_bitov, ecc_curve_id kluc_krivka, int algoritmus, char* krajina, char* mesto, char* domena, char* email);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* generovat_rsa_certifikat: realizuje vygenerovania sukromneho kluca, nacitanie sukromneho kluca autority,
|
||||||
|
* vygenerovanie a podpis rsa certifikatu pomocou sukromneho kluca a certifikatu autority
|
||||||
|
* @parameter int pocet_bitov : velkost kluca
|
||||||
|
* @parameter int exponent : hodnota exponentu
|
||||||
|
* @parameter int algoritmus : kod algoritmu, sluziaceho na vymenu klucov
|
||||||
|
* @vrati int : operacia bola uspesna(0), neuspesna(-1)
|
||||||
|
*/
|
||||||
|
int generovat_rsa_certifikat(int pocet_bitov, int exponent, int algoritmus, char* krajina, char* mesto, char* domena, char* email);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* nastav_ctx_klient : realizuje vytvorenie a inicializaciu CTX struktury
|
* nastav_ctx_klient : realizuje vytvorenie a inicializaciu CTX struktury
|
||||||
|
106
readme.txt
106
readme.txt
@ -1,11 +1,23 @@
|
|||||||
Repozitar: Bakalarska praca
|
Bakalarska praca
|
||||||
Meno studenta: Tomas Lukac
|
Meno studenta: Tomas Lukac
|
||||||
Datum poslednej upravy: 24.2.2020
|
Veduci BP: prof. Ing. Milos Drutarovsky CSc.
|
||||||
|
Skola: KEMT FEI TUKE
|
||||||
|
Datum poslednej upravy: 12.3.2020
|
||||||
----------------------------
|
----------------------------
|
||||||
Zoznam zdrojovych suborov
|
Zoznam zdrojovych suborov
|
||||||
certifikaty
|
certifikaty
|
||||||
|__server.pem
|
|__autorita_ecc.pem
|
||||||
|__server.key
|
|__autorita_ecc.key
|
||||||
|
|__autorita_rsa.pem
|
||||||
|
|__autorita_rsa.key
|
||||||
|
|__server_ecc.pem
|
||||||
|
|__server_ecc.key
|
||||||
|
|__server_rsa.pem
|
||||||
|
|__server_rsa.key
|
||||||
|
|__klient_ecc.pem
|
||||||
|
|__klient_ecc.key
|
||||||
|
|__klient_rsa.pem
|
||||||
|
|__klient_rsa.key
|
||||||
kniznica
|
kniznica
|
||||||
|__komunikacia.h
|
|__komunikacia.h
|
||||||
|__komunikacia.c
|
|__komunikacia.c
|
||||||
@ -13,42 +25,82 @@ Zoznam zdrojovych suborov
|
|||||||
|__kryptografia.c
|
|__kryptografia.c
|
||||||
|__vstup.h
|
|__vstup.h
|
||||||
|__vstup.c
|
|__vstup.c
|
||||||
klient.c
|
tcpip_kanal
|
||||||
server.c
|
|__klient.c
|
||||||
Makefile
|
|__server.c
|
||||||
|
|__Makefile
|
||||||
|
rs232_kanal
|
||||||
|
|__klient.c
|
||||||
|
|__server.c
|
||||||
|
|__Makefile
|
||||||
|
|
||||||
Opis aplikacie
|
Opis aplikacie
|
||||||
Realizuje zabezpecenu vymenu sprav medzi klientom a serverom
|
Realizuje zabezpecenu vymenu sprav medzi klientom a serverom a autentizaciu servera klientom vyuzitim kniznice WolfSSL. Ako prvu je
|
||||||
a autentizaciu servera klientom vyuzitim kniznice WolfSSL
|
potrebne spustit aplikaciu na strane servera s prepinacom port s hodnotou, ktora urcuje ake bude cislo portu, na ktorom bude server
|
||||||
|
cakar na prichadzajucu komunikaciu. Dalsim potrebnym prepinacom je bud -n (nacitanie certifikatov z adresaru /certifikaty) alebo
|
||||||
|
-g (vygenerovanie a podpis certifikatov pomocou certifikatu a kluca autority, ktore sa nachadzaju taktiez v adresari /certifikaty).
|
||||||
|
Sukromne kluce a certifikaty su ulozene vo formate Privacy-Enhanced Mail (PEM). Nasledne je potrebne spustit aplikaciu na strane
|
||||||
|
klienta, ktora okrem predchadzajucich parametrov vyzaduje parameter pre ip adresu: -ip adresa. Po vytvoreni zabezpeceneho prenosoveho
|
||||||
|
kanalu sa klient pokusi odoslat subor, ktoreho lokacia mu bola predana pri spusteni pomocou parametru -s subor. Pred samotnym poslanim
|
||||||
|
klient najprv vyhotovi kontrolny sucet suboru, ktory odosle po zabezpecenom kanali serveru. Ten po prijati suboru overi ci sa zhoduje
|
||||||
|
prijaty kontrolny sucet s jeho, ktory vyhotovil po prijati suboru. Ak pri prijati suboru nenastala chyba a kontrolne sucty sa zhoduju
|
||||||
|
server oznami ze prijem bol uspesny a dalej caka na komunikaciu. Klientsky program po odoslani suboru ukonci svoju cinnost.
|
||||||
|
|
||||||
|
Generovanie certifikatov RSA (OpenSSL)
|
||||||
|
openssl genrsa -out autorita_rsa.key 2048
|
||||||
|
openssl req -x509 -new -nodes -key autorita_rsa.key -sha256 -days 1825 -out autorita_rsa.pem
|
||||||
|
openssl x509 -outform pem -in autorita_rsa.pem -out autorita_rsa.crt
|
||||||
|
openssl genrsa -out server_rsa.key 2048
|
||||||
|
openssl req -new -key server_rsa.key -out server_rsa.csr
|
||||||
|
openssl x509 -req -in server_rsa.csr -CA autorita_rsa.pem -CAkey autorita_rsa.key -CAcreateserial -out server_rsa.pem -days 1825 -sha256
|
||||||
|
openssl x509 -outform pem -in server_rsa.pem -out server_rsa.crt
|
||||||
|
openssl genrsa -out klient_rsa.key 2048
|
||||||
|
openssl req -new -key klient_rsa.key -out klient_rsa.csr
|
||||||
|
openssl x509 -req -in klient_rsa.csr -CA autorita_rsa.pem -CAkey autorita_rsa.key -CAcreateserial -out klient_rsa.pem -days 1825 -sha256
|
||||||
|
openssl pkcs12 -inkey klient_rsa.key -in klient_rsa.pem -export -out klient_rsa.pfx
|
||||||
|
|
||||||
|
Generovanie certifikatov ECC (OpenSSL)
|
||||||
|
openssl ecparam -genkey -name prime256v1 -out autorita_ecc.key
|
||||||
|
openssl req -x509 -new -nodes -key autorita_ecc.key -sha256 -days 1825 -out autorita_ecc.pem
|
||||||
|
openssl x509 -outform pem -in autorita_ecc.pem -out autorita_ecc.crt
|
||||||
|
openssl ecparam -genkey -name prime256v1 -out server_ecc.key
|
||||||
|
openssl req -new -key server_ecc.key -out server_ecc.csr
|
||||||
|
openssl x509 -req -in server_ecc.csr -CA autorita_ecc.pem -CAkey autorita_ecc.key -CAcreateserial -out server_ecc.pem -days 1825 -sha256
|
||||||
|
openssl x509 -outform pem -in server_ecc.pem -out server_ecc.crt
|
||||||
|
openssl ecparam -genkey -name prime256v1 -out klient_ecc.key
|
||||||
|
openssl req -new -key klient_ecc.key -out klient_ecc.csr
|
||||||
|
openssl x509 -req -in klient_ecc.csr -CA autorita_ecc.pem -CAkey autorita_ecc.key -CAcreateserial -out klient_ecc.pem -days 1825 -sha256
|
||||||
|
openssl pkcs12 -inkey klient_ecc.key -in klient_ecc.pem -export -out klient_ecc.pfx
|
||||||
|
|
||||||
|
|
||||||
Navod na prelozenie a spustenie (Linux)
|
Navod na prelozenie a spustenie (Linux)
|
||||||
1. prelozenie kniznice wolfssl s podporou OpenSSL (v adresari s kniznicou)
|
1. prelozenie kniznice wolfssl s podporou OpenSSL (v adresari s kniznicou)
|
||||||
./configure --enable-opensslextra --enable-certgen --enable-keygen
|
./configure --enable-opensslextra --enable-certgen --enable-keygen
|
||||||
make
|
make
|
||||||
sudo make install
|
sudo make install
|
||||||
2. prelozenie programov (v adresari)
|
2. prelozenie programov (v podadresari tcpip_kanal alebo rs232_kanal)
|
||||||
make all
|
make all
|
||||||
3. spustenie
|
3. spustenie
|
||||||
./server -port port
|
./server -port port -n rsa|ecc
|
||||||
./server -port -g rsa|ecc
|
./server -port port -g rsa|ecc
|
||||||
./klient -ip 127.0.0.1 -port
|
./klient -ip 127.0.0.1 -port port -n rsa|ecc -s subor
|
||||||
|
./klient -ip 127.0.0.1 -port port -g rsa|ecc -s subor
|
||||||
|
|
||||||
Navod na prelozenie a spustenie (Windows)
|
Navod na prelozenie a spustenie (Windows)
|
||||||
1. prelozenie programov (v adresari)
|
1. prelozenie programov (v podadresari tcpip_kanal alebo rs232_kanal)
|
||||||
mingw32-make all
|
mingw32-make all
|
||||||
2. spustenie
|
2. spustenie
|
||||||
server -port port
|
server -port port -n rsa|ecc
|
||||||
server -port -g rsa|ecc
|
server -port port -g rsa|ecc
|
||||||
klient -ip 127.0.0.1 -port port
|
klient -ip 127.0.0.1 -port port -n rsa|ecc -s subor
|
||||||
|
klient -ip 127.0.0.1 -port port -g rsa|ecc -s subor
|
||||||
|
|
||||||
|
Zoznam DLL suborov potrebnych pre spustenie (Windows)
|
||||||
|
1. vcruntime140.dll
|
||||||
|
2. wolfssl.dll
|
||||||
|
3. ws2_32.dll
|
||||||
|
Poznamka:
|
||||||
|
pre preklad na 64bit architekturach je nutne premennovat subory s koncovkami *_64.dll na nazvy DLLiek uvedenych vyssie
|
||||||
|
a povodne DLLka premenovat na ine nazvy, najlepsie *_32.dll
|
||||||
|
|
||||||
Postup prace:
|
|
||||||
1. Spracovanie chyb pomocou stderr
|
|
||||||
2. Doplnenie hlavicky do zdrojovych suborov
|
|
||||||
3. Vytvorenie rutiny pre odosielanie suborov namiesto sprav
|
|
||||||
4. Upravenie Makefile pre kompilovanie na platforme Windows
|
|
||||||
5. Implementacia generovania certifikatov
|
|
||||||
6. Implementacia obojsmernej autentizacie
|
|
||||||
|
|
||||||
TODO:
|
|
||||||
4. vytvorenie rozhrania pre komunikacny kanal rs232 pomocou wolfssl abstraction layer
|
|
||||||
(wolfssl.com/docs/wolfssl-manual/ch5)
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
## Meno studenta: Tomas Lukac ##
|
## Meno studenta: Tomas Lukac ##
|
||||||
## Veduci BP: prof. Ing. Milos Drutarovsky CSc. ##
|
## Veduci BP: prof. Ing. Milos Drutarovsky CSc. ##
|
||||||
## Skola: KEMT FEI TUKE ##
|
## Skola: KEMT FEI TUKE ##
|
||||||
## Datum poslednej upravy: 9.3.2020 ##
|
## Datum poslednej upravy: 12.3.2020 ##
|
||||||
##################################################
|
##################################################
|
||||||
|
|
||||||
#prekladac
|
#prekladac
|
||||||
|
BIN
rs232_kanal/api-ms-win-crt-runtime-l1-1-0.dll
Normal file
BIN
rs232_kanal/api-ms-win-crt-runtime-l1-1-0.dll
Normal file
Binary file not shown.
BIN
rs232_kanal/api-ms-win-crt-runtime-l1-1-0_64.dll
Normal file
BIN
rs232_kanal/api-ms-win-crt-runtime-l1-1-0_64.dll
Normal file
Binary file not shown.
@ -3,7 +3,7 @@
|
|||||||
// Meno studenta: Tomas Lukac //
|
// Meno studenta: Tomas Lukac //
|
||||||
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
||||||
// Skola: KEMT FEI TUKE //
|
// Skola: KEMT FEI TUKE //
|
||||||
// Datum poslednej upravy: 9.3.2020 //
|
// Datum poslednej upravy: 12.3.2020 //
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -28,39 +28,6 @@ int cislo_portu = 2;
|
|||||||
int baud_frekvencia = 9600;
|
int baud_frekvencia = 9600;
|
||||||
char rezim[]={'8','N','1', 0};
|
char rezim[]={'8','N','1', 0};
|
||||||
|
|
||||||
/**
|
|
||||||
* rs232_zapis: umoznuje zapis dat do serialoveho portu
|
|
||||||
* @parameter WOLSSL* ssl : ukazuje na aktualnu relaciu
|
|
||||||
* @parameter char* buf : ukazuje na buffer, do kt. zapise wolfssl zasifrovany text na odoslanie
|
|
||||||
* @parameter int sz : velkost buffera
|
|
||||||
* @vrati int
|
|
||||||
*/
|
|
||||||
int rs232_zapis(WOLFSSL *ssl, char *buf, int sz, void *ctx)
|
|
||||||
{
|
|
||||||
printf("Klient posiela ...\n");
|
|
||||||
int n = RS232_SendBuf(cislo_portu, buf, sz);
|
|
||||||
printf("Klient poslal %d bajtov...\n", n);
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* rs232_citanie: umoznuje citanie dat zo serialoveho portu
|
|
||||||
* @parameter WOLFSSL* ssl : ukazuje na aktualnu relaciu
|
|
||||||
* @parameter char* buf : ukazuje na buffer, kde prichadzajuci zasifrovany text by mal byt nakopirovany
|
|
||||||
* aby ho wolfssl mohla odsifrovat
|
|
||||||
* @parameter int sz : velkost buffera
|
|
||||||
* @vrati int
|
|
||||||
*/
|
|
||||||
int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx)
|
|
||||||
{
|
|
||||||
printf("Klienta prijima...\n");
|
|
||||||
int n;
|
|
||||||
while(n <= 0)
|
|
||||||
n = RS232_PollComport(cislo_portu, buf, sz);
|
|
||||||
printf("Klienta prijal %d bajtov.\n", n);
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char const *argv[])
|
int main(int argc, char const *argv[])
|
||||||
{
|
{
|
||||||
WOLFSSL *ssl;
|
WOLFSSL *ssl;
|
||||||
@ -96,7 +63,7 @@ int main(int argc, char const *argv[])
|
|||||||
int uspech = 0;
|
int uspech = 0;
|
||||||
if(wolfSSL_connect(ssl) != SSL_SUCCESS)
|
if(wolfSSL_connect(ssl) != SSL_SUCCESS)
|
||||||
{
|
{
|
||||||
printf("nepodarilo sa pripojit\n");
|
printf("Nepodarilo sa pripojit\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -3,7 +3,7 @@
|
|||||||
// Meno studenta: Tomas Lukac //
|
// Meno studenta: Tomas Lukac //
|
||||||
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
||||||
// Skola: KEMT FEI TUKE //
|
// Skola: KEMT FEI TUKE //
|
||||||
// Datum poslednej upravy: 9.3.2020 //
|
// Datum poslednej upravy: 12.3.2020 //
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -27,56 +27,6 @@ int cislo_portu = 3;
|
|||||||
int baud_frekvencia = 9600;
|
int baud_frekvencia = 9600;
|
||||||
char rezim[]={'8','N','1', 0};
|
char rezim[]={'8','N','1', 0};
|
||||||
|
|
||||||
/**
|
|
||||||
* rs232_zapis: umoznuje zapis dat do serialoveho portu
|
|
||||||
* @parameter WOLSSL* ssl : ukazuje na aktualnu relaciu
|
|
||||||
* @parameter char* buf : ukazuje na buffer, do kt. zapise wolfssl zasifrovany text na odoslanie
|
|
||||||
* @parameter int sz : velkost buffera
|
|
||||||
* @vrati int
|
|
||||||
*/
|
|
||||||
int rs232_zapis(WOLFSSL *ssl, char *buf, int sz, void *ctx)
|
|
||||||
{
|
|
||||||
printf("Server posiela ...\n");
|
|
||||||
int n = RS232_SendBuf(cislo_portu, buf, sz);
|
|
||||||
printf("Server poslal %d bajtov\n", n);
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* rs232_citanie: umoznuje citanie dat zo serialoveho portu
|
|
||||||
* @parameter WOLFSSL* ssl : ukazuje na aktualnu relaciu
|
|
||||||
* @parameter char* buf : ukazuje na buffer, kde prichadzajuci zasifrovany text by mal byt nakopirovany
|
|
||||||
* aby ho wolfssl mohla odsifrovat
|
|
||||||
* @parameter int sz : velkost buffera
|
|
||||||
* @vrati int
|
|
||||||
*/
|
|
||||||
int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx)
|
|
||||||
{
|
|
||||||
printf("Server prijima...\n");
|
|
||||||
int n;
|
|
||||||
int prijal = 0;
|
|
||||||
while(1)
|
|
||||||
{
|
|
||||||
n = RS232_PollComport(cislo_portu, buf, sz);
|
|
||||||
if(n > 0)
|
|
||||||
{
|
|
||||||
buf[n] = '\0'; /* always put a "null" at the end of a string! */
|
|
||||||
for(int i=0; i < n; i++)
|
|
||||||
{
|
|
||||||
if(buf[i] < 32) /* replace unreadable control-codes by dots */
|
|
||||||
{
|
|
||||||
buf[i] = '.';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
printf("received %i bytes: %s\n", n, (char *)buf);
|
|
||||||
}
|
|
||||||
prijal += n;
|
|
||||||
|
|
||||||
}
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char const *argv[])
|
int main(int argc, char const *argv[])
|
||||||
{
|
{
|
||||||
WOLFSSL *ssl;
|
WOLFSSL *ssl;
|
||||||
|
Binary file not shown.
Binary file not shown.
BIN
rs232_kanal/vcruntime140.dll
Normal file
BIN
rs232_kanal/vcruntime140.dll
Normal file
Binary file not shown.
BIN
rs232_kanal/vcruntime140_64.dll
Normal file
BIN
rs232_kanal/vcruntime140_64.dll
Normal file
Binary file not shown.
Binary file not shown.
BIN
rs232_kanal/wolfssl_64.dll
Normal file
BIN
rs232_kanal/wolfssl_64.dll
Normal file
Binary file not shown.
BIN
rs232_kanal/ws2_32.dll
Normal file
BIN
rs232_kanal/ws2_32.dll
Normal file
Binary file not shown.
BIN
rs232_kanal/ws2_32_64.dll
Normal file
BIN
rs232_kanal/ws2_32_64.dll
Normal file
Binary file not shown.
@ -3,36 +3,36 @@
|
|||||||
## Meno studenta: Tomas Lukac ##
|
## Meno studenta: Tomas Lukac ##
|
||||||
## Veduci BP: prof. Ing. Milos Drutarovsky CSc. ##
|
## Veduci BP: prof. Ing. Milos Drutarovsky CSc. ##
|
||||||
## Skola: KEMT FEI TUKE ##
|
## Skola: KEMT FEI TUKE ##
|
||||||
## Datum poslednej upravy: 9.3.2020 ##
|
## Datum poslednej upravy: 12.3.2020 ##
|
||||||
##################################################
|
##################################################
|
||||||
|
|
||||||
#prekladac
|
#prekladac
|
||||||
CC = gcc
|
CC = gcc
|
||||||
|
|
||||||
#prepinace pre prekladac
|
#prepinace pre prekladac
|
||||||
CFLAGS = -Wall -Wcpp -fPIC -DREPLICATION_ENABLED -DJOURNALING_ENABLED -I./../wolfssl_hlavickove_subory/
|
CFLAGS = -Wcpp -I./../wolfssl_hlavickove_subory/
|
||||||
LIB32 = -L. -lwolfssl -lws2_32 -Os
|
LIB32 = -L. -lwolfssl -lws2_32 -Os
|
||||||
LIB64 = -L. -lwolfssl -lws2_32 -m64
|
LIB64 = -L. -lwolfssl -lws2_32 -m64
|
||||||
|
|
||||||
all: klient server
|
all: klient server
|
||||||
|
|
||||||
klient: klient.o kryptografia.o komunikacia.o
|
klient: klient.o kryptografia.o komunikacia.o
|
||||||
$(CC) $(CFLAGS) -o klient klient.o kryptografia.o komunikacia.o $(LIB64)
|
$(CC) $(CFLAGS) -o klient klient.o kryptografia.o komunikacia.o $(LIB32)
|
||||||
|
|
||||||
server: server.o kryptografia.o komunikacia.o
|
server: server.o kryptografia.o komunikacia.o
|
||||||
$(CC) $(CFLAGS) -o server server.o kryptografia.o komunikacia.o $(LIB64)
|
$(CC) $(CFLAGS) -o server server.o kryptografia.o komunikacia.o $(LIB32)
|
||||||
|
|
||||||
klient.o: klient.c
|
klient.o: klient.c
|
||||||
$(CC) $(CFLAGS) -c klient.c $(LIB64)
|
$(CC) $(CFLAGS) -c klient.c $(LIB32)
|
||||||
|
|
||||||
server.o: server.c
|
server.o: server.c
|
||||||
$(CC) $(CFLAGS) -c server.c $(LIB64)
|
$(CC) $(CFLAGS) -c server.c $(LIB32)
|
||||||
|
|
||||||
kryptografia.o: ../kniznica/kryptografia.c ../kniznica/kryptografia.h
|
kryptografia.o: ../kniznica/kryptografia.c ../kniznica/kryptografia.h
|
||||||
$(CC) $(CFLAGS) -c ../kniznica/kryptografia.c $(LIB64)
|
$(CC) $(CFLAGS) -c ../kniznica/kryptografia.c $(LIB32)
|
||||||
|
|
||||||
komunikacia.o: ../kniznica/komunikacia.c ../kniznica/komunikacia.h
|
komunikacia.o: ../kniznica/komunikacia.c ../kniznica/komunikacia.h
|
||||||
$(CC) $(CFLAGS) -c ../kniznica/komunikacia.c $(LIB64)
|
$(CC) $(CFLAGS) -c ../kniznica/komunikacia.c $(LIB32)
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
// Meno studenta: Tomas Lukac //
|
// Meno studenta: Tomas Lukac //
|
||||||
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
||||||
// Skola: KEMT FEI TUKE //
|
// Skola: KEMT FEI TUKE //
|
||||||
// Datum poslednej upravy: 9.3.2020 //
|
// Datum poslednej upravy: 12.3.2020 //
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "../kniznica/kryptografia.h"
|
#include "../kniznica/kryptografia.h"
|
||||||
@ -17,9 +17,9 @@
|
|||||||
|
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
int autentizacia_klienta = 0;
|
|
||||||
int generovanie_certifikatu = 0;
|
int generovanie_certifikatu = 0;
|
||||||
int nacitanie_zo_suboru = 0;
|
int nacitanie_zo_suboru = 0;
|
||||||
|
int uvedeny_subor = 0;
|
||||||
int ip = 0;
|
int ip = 0;
|
||||||
int port = 0;
|
int port = 0;
|
||||||
|
|
||||||
@ -34,7 +34,8 @@ int main(int argc, char** argv)
|
|||||||
|
|
||||||
int cislo_soketu = 0;
|
int cislo_soketu = 0;
|
||||||
int cislo_portu = 0;
|
int cislo_portu = 0;
|
||||||
char *ip_adresa = NULL;
|
char* ip_adresa = NULL;
|
||||||
|
char* subor = NULL;
|
||||||
const char *subor_certifikat = NULL;
|
const char *subor_certifikat = NULL;
|
||||||
const char *subor_kluc = NULL;
|
const char *subor_kluc = NULL;
|
||||||
WOLFSSL *ssl; WOLFSSL_CTX *ctx;
|
WOLFSSL *ssl; WOLFSSL_CTX *ctx;
|
||||||
@ -49,6 +50,19 @@ int main(int argc, char** argv)
|
|||||||
//ak ano pozrie aky typ certifikatu (v CLI argument hned za nim) bol zvoleny
|
//ak ano pozrie aky typ certifikatu (v CLI argument hned za nim) bol zvoleny
|
||||||
for(int i = 0; i < argc; i++)
|
for(int i = 0; i < argc; i++)
|
||||||
{
|
{
|
||||||
|
if( (!strcmp(argv[i], "-s")) )
|
||||||
|
{
|
||||||
|
uvedeny_subor = 1;
|
||||||
|
if((argv[i+1] == NULL) )
|
||||||
|
{
|
||||||
|
printf("Nezadali ste cestu ku suboru\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
subor = argv[i+1];
|
||||||
|
}
|
||||||
|
}
|
||||||
if( (!strcmp(argv[i], "-ip")) )
|
if( (!strcmp(argv[i], "-ip")) )
|
||||||
{
|
{
|
||||||
port = 1;
|
port = 1;
|
||||||
@ -119,14 +133,18 @@ int main(int argc, char** argv)
|
|||||||
else if(!strcmp(argv[i+1], "rsa"))
|
else if(!strcmp(argv[i+1], "rsa"))
|
||||||
{
|
{
|
||||||
wolfSSL_CTX_load_verify_locations(ctx, "../certifikaty/autorita_rsa.pem", NULL);
|
wolfSSL_CTX_load_verify_locations(ctx, "../certifikaty/autorita_rsa.pem", NULL);
|
||||||
if(generovat_rsa_certifikat(ctx, RSA_VELKOST, RSA_EXPONENT, CTC_SHA256wRSA, "SR", "Kosice", "Klient.sk", "klient@klient.sk") == -1)
|
if(generovat_rsa_certifikat(RSA_VELKOST, RSA_EXPONENT, CTC_SHA256wRSA, "SR", "Kosice", "Klient.sk", "klient@klient.sk") == -1) return -1;
|
||||||
return -1;
|
subor_certifikat = "../certifikaty/vygenerovany_certifikat.pem";
|
||||||
|
subor_kluc = "../certifikaty/vygenerovany_kluc.key";
|
||||||
|
if(nacitat_certifikaty(ctx, subor_certifikat, subor_kluc) == -1) return -1;
|
||||||
}
|
}
|
||||||
else if(!strcmp(argv[i+1], "ecc"))
|
else if(!strcmp(argv[i+1], "ecc"))
|
||||||
{
|
{
|
||||||
wolfSSL_CTX_load_verify_locations(ctx, "../certifikaty/autorita_ecc.pem", NULL);
|
wolfSSL_CTX_load_verify_locations(ctx, "../certifikaty/autorita_ecc.pem", NULL);
|
||||||
if(generovat_ecc_certifikat(ctx, ECC_VELKOST, ECC_PRIME239V1, CTC_SHAwECDSA, "SR", "Kosice", "Klient.sk", "klient@klient.sk") == -1)
|
if(generovat_ecc_certifikat(ECC_VELKOST, ECC_SECP256R1, CTC_SHAwECDSA, "SR", "Kosice", "Klient.sk", "klient@klient.sk") == -1) return -1;
|
||||||
return -1;
|
subor_certifikat = "../certifikaty/vygenerovany_certifikat.pem";
|
||||||
|
subor_kluc = "../certifikaty/vygenerovany_kluc.key";
|
||||||
|
if(nacitat_certifikaty(ctx, subor_certifikat, subor_kluc) == -1) return -1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -146,12 +164,17 @@ int main(int argc, char** argv)
|
|||||||
printf("Nebol urceny port\n");
|
printf("Nebol urceny port\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if(!generovanie_certifikatu && !nacitanie_zo_suboru)
|
else if(!generovanie_certifikatu && !nacitanie_zo_suboru)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Nebola zvolena metoda nacitania certifikatov\n");
|
fprintf(stderr, "Nebola zvolena metoda nacitania certifikatov\n");
|
||||||
printf("Zadajde prepinac -g (generovanie), alebo -n (nacitanie_zo_suboru) s parametrom rsa alebo ecc\n");
|
printf("Zadajde prepinac -g (generovanie), alebo -n (nacitanie_zo_suboru) s parametrom rsa alebo ecc\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
else if(!uvedeny_subor)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Nebola uvedena cesta ku suboru na odoslanie\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
//umoznuje vybrat sifry ktore sa budu nachadzat v sifrovacom subore
|
//umoznuje vybrat sifry ktore sa budu nachadzat v sifrovacom subore
|
||||||
//nastav_sifry(ctx, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256");
|
//nastav_sifry(ctx, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256");
|
||||||
|
|
||||||
@ -169,7 +192,7 @@ int main(int argc, char** argv)
|
|||||||
}
|
}
|
||||||
zobraz_sifru(ssl);
|
zobraz_sifru(ssl);
|
||||||
zobraz_certifikat(ssl);
|
zobraz_certifikat(ssl);
|
||||||
if(poslat_subor(ssl, ctx, "nieco.txt") == -1) return -1;
|
if(poslat_subor(ssl, ctx, subor) == -1) return -1;
|
||||||
ukoncit_spojenie(ssl, ctx);
|
ukoncit_spojenie(ssl, ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -3,7 +3,7 @@
|
|||||||
// Meno studenta: Tomas Lukac //
|
// Meno studenta: Tomas Lukac //
|
||||||
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
||||||
// Skola: KEMT FEI TUKE //
|
// Skola: KEMT FEI TUKE //
|
||||||
// Datum poslednej upravy: 9.3.2020 //
|
// Datum poslednej upravy: 12.3.2020 //
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "../kniznica/kryptografia.h"
|
#include "../kniznica/kryptografia.h"
|
||||||
@ -77,6 +77,7 @@ int main(int argc, char **argv)
|
|||||||
else if(!strcmp(argv[i+1], "rsa"))
|
else if(!strcmp(argv[i+1], "rsa"))
|
||||||
{
|
{
|
||||||
wolfSSL_CTX_load_verify_locations(ctx, "../certifikaty/autorita_rsa.pem", NULL);
|
wolfSSL_CTX_load_verify_locations(ctx, "../certifikaty/autorita_rsa.pem", NULL);
|
||||||
|
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, 0);
|
||||||
subor_certifikat = "../certifikaty/server_rsa.pem";
|
subor_certifikat = "../certifikaty/server_rsa.pem";
|
||||||
subor_kluc = "../certifikaty/server_rsa.key";
|
subor_kluc = "../certifikaty/server_rsa.key";
|
||||||
if(nacitat_certifikaty(ctx, subor_certifikat, subor_kluc) == -1) return -1;
|
if(nacitat_certifikaty(ctx, subor_certifikat, subor_kluc) == -1) return -1;
|
||||||
@ -84,6 +85,7 @@ int main(int argc, char **argv)
|
|||||||
else if(!strcmp(argv[i+1], "ecc"))
|
else if(!strcmp(argv[i+1], "ecc"))
|
||||||
{
|
{
|
||||||
wolfSSL_CTX_load_verify_locations(ctx, "../certifikaty/autorita_ecc.pem", NULL);
|
wolfSSL_CTX_load_verify_locations(ctx, "../certifikaty/autorita_ecc.pem", NULL);
|
||||||
|
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, 0);
|
||||||
subor_certifikat = "../certifikaty/server_ecc.pem";
|
subor_certifikat = "../certifikaty/server_ecc.pem";
|
||||||
subor_kluc = "../certifikaty/server_ecc.key";
|
subor_kluc = "../certifikaty/server_ecc.key";
|
||||||
if(nacitat_certifikaty(ctx, subor_certifikat, subor_kluc) == -1) return -1;
|
if(nacitat_certifikaty(ctx, subor_certifikat, subor_kluc) == -1) return -1;
|
||||||
@ -110,16 +112,18 @@ int main(int argc, char **argv)
|
|||||||
else if(!strcmp(argv[i+1], "rsa"))
|
else if(!strcmp(argv[i+1], "rsa"))
|
||||||
{
|
{
|
||||||
wolfSSL_CTX_load_verify_locations(ctx, "../certifikaty/autorita_rsa.pem", NULL);
|
wolfSSL_CTX_load_verify_locations(ctx, "../certifikaty/autorita_rsa.pem", NULL);
|
||||||
if(generovat_rsa_certifikat(ctx, RSA_VELKOST, RSA_EXPONENT, CTC_SHA256wRSA, "SR", "Kosice", "Server.sk", "server@server.sk") == -1)
|
if(generovat_rsa_certifikat(RSA_VELKOST, RSA_EXPONENT, CTC_SHA256wRSA, "SR", "Kosice", "Server.sk", "server@server.sk") == -1) return -1;
|
||||||
return -1;
|
subor_certifikat = "../certifikaty/vygenerovany_certifikat.pem";
|
||||||
|
subor_kluc = "../certifikaty/vygenerovany_kluc.key";
|
||||||
|
if(nacitat_certifikaty(ctx, subor_certifikat, subor_kluc) == -1) return -1;
|
||||||
}
|
}
|
||||||
else if(!strcmp(argv[i+1], "ecc"))
|
else if(!strcmp(argv[i+1], "ecc"))
|
||||||
{
|
{
|
||||||
wolfSSL_CTX_load_verify_locations(ctx, "../certifikaty/autorita_ecc.pem", NULL);
|
wolfSSL_CTX_load_verify_locations(ctx, "../certifikaty/autorita_ecc.pem", NULL);
|
||||||
if(generovat_ecc_certifikat(ctx, ECC_VELKOST, ECC_PRIME239V1, CTC_SHAwECDSA, "SR", "Kosice", "Server.sk", "server@server.sk") == -1)
|
if(generovat_ecc_certifikat(ECC_VELKOST, ECC_SECP256R1, CTC_SHAwECDSA, "SR", "Kosice", "Server.sk", "server@server.sk") == -1) return -1;
|
||||||
return -1;
|
subor_certifikat = "../certifikaty/vygenerovany_certifikat.pem";
|
||||||
|
subor_kluc = "../certifikaty/vygenerovany_kluc.key";
|
||||||
|
if(nacitat_certifikaty(ctx, subor_certifikat, subor_kluc) == -1) return -1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -134,7 +138,7 @@ int main(int argc, char **argv)
|
|||||||
fprintf(stderr, "Nebol urceny port\n");
|
fprintf(stderr, "Nebol urceny port\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if(!generovanie_certifikatu && !nacitanie_zo_suboru)
|
else if(!generovanie_certifikatu && !nacitanie_zo_suboru)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Nebola zvolena metoda nacitania certifikatov\n");
|
fprintf(stderr, "Nebola zvolena metoda nacitania certifikatov\n");
|
||||||
printf("Zadajde prepinac -g (generovanie), alebo -n (nacitanie_zo_suboru) s parametrom rsa alebo ecc\n");
|
printf("Zadajde prepinac -g (generovanie), alebo -n (nacitanie_zo_suboru) s parametrom rsa alebo ecc\n");
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -7,8 +7,9 @@
|
|||||||
::::::::::::::::::::::::::::::::::::::::::::::::::
|
::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
|
|
||||||
:: Program je mozne spustit s prepinacmi:
|
:: Program je mozne spustit s prepinacmi:
|
||||||
:: -g rsa|ecc sluzi na generovanie certifikatu, ak ho neuvedieme program sa pokusi nacitat certifikaty z adresara /certifikaty
|
:: -g rsa|ecc sluzi na generovanie certifikatu
|
||||||
|
:: -n rsa|ecc sluzi na nacitanie uz vygenerovanych certifikatov z adresara /certifikaty
|
||||||
:: -s cesta-ku-suboru sluzi na nacitanie cesty k suboru, ktory chceme odoslat (este nie je)
|
:: -s cesta-ku-suboru sluzi na nacitanie cesty k suboru, ktory chceme odoslat (este nie je)
|
||||||
|
|
||||||
::Priklady spustenia:
|
::Priklady spustenia:
|
||||||
klient -ip 127.0.0.1 -port 8080
|
klient -ip 127.0.0.1 -port 8080 -n rsa
|
||||||
|
@ -7,9 +7,9 @@
|
|||||||
::::::::::::::::::::::::::::::::::::::::::::::::::
|
::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
|
|
||||||
:: Program server je mozne spustit s prepinacmi:
|
:: Program server je mozne spustit s prepinacmi:
|
||||||
:: -g rsa|ecc sluzi na generovanie certifikatu, ak ho neuvedieme program sa pokusi nacitat certifikaty z adresara /certifikaty
|
:: -g rsa|ecc sluzi na generovanie certifikatu
|
||||||
|
:: -n rsa|ecc sluzi na nacitanie uz vygenerovanych certifikatov z adresara /certifikaty
|
||||||
|
|
||||||
::Priklady spustenia:
|
::Priklady spustenia:
|
||||||
server -port 8080
|
server -port 8080 -n rsa
|
||||||
::server -port 8080 -g ecc
|
::server -port 8080 -g ecc
|
||||||
::server -port 8080
|
|
Binary file not shown.
Binary file not shown.
BIN
tcpip_kanal/wolfssl_64.dll
Normal file
BIN
tcpip_kanal/wolfssl_64.dll
Normal file
Binary file not shown.
BIN
tcpip_kanal/ws2_32.dll
Normal file
BIN
tcpip_kanal/ws2_32.dll
Normal file
Binary file not shown.
BIN
tcpip_kanal/ws2_32_64.dll
Normal file
BIN
tcpip_kanal/ws2_32_64.dll
Normal file
Binary file not shown.
16
teoria.txt
16
teoria.txt
@ -1,16 +0,0 @@
|
|||||||
I/O rutiny
|
|
||||||
- implicitne su pouzite recv() a send() funkcie ktore realizuju citanie zapis do file descriptoru nastavenho pomocou wolfssl_set_fd()
|
|
||||||
- prototypy vlastnych funkcii
|
|
||||||
int CBIORecv(CYASSL* ssl, char* buf, int sz, void* ctx)
|
|
||||||
int CBIOSend(CYASSL* ssl, char* buf, int sz, void* ctx)
|
|
||||||
- implicitne je descriptor sietoveho soketu posunuty do i/o rutiny v ctx parametri
|
|
||||||
- ssl je ukazovatel na aktualnu relaciu
|
|
||||||
- receive
|
|
||||||
- buf -> ukazuje na buffer, kde prichadzajuci zasifrovany text by mal byt nakopirovany aby ho wolfssl mohla odsifrovat
|
|
||||||
- sz -> velkost bufferu
|
|
||||||
- send
|
|
||||||
- buf -> ukazuje na buffer do ktoreho wolfssl zapisala zasifrovany text na odoslanie
|
|
||||||
- sz -> velkost bufferu
|
|
||||||
- registracia funkcii
|
|
||||||
wolfSSL_SetIORecv(ctx, myCBIORecv)
|
|
||||||
wolfSSL_SetIOSend(ctx, myCBIOSend)
|
|
Loading…
Reference in New Issue
Block a user