Как заменить клиентский сертификат в openssl source - PullRequest
0 голосов
/ 05 мая 2020

Добрый день всем. В этом суть моей проблемы: вы должны заменить сертификат при его отправке с сервера клиенту. А затем, когда клиент примет сертификат сервера, замените его снова. Сертификаты клиента и сервера самозаверяющие. Замените эти сертификаты подписанным. Это необходимо для того, чтобы при прослушивании трафика c в середине было видно, что соединение установлено с использованием сертифицированного сертификата. Структуру сертификата X509 в источниках я не нашел, поэтому делаю иначе: использую функцию, которая конвертирует сертификат формата .pem в сертификат формата X509. После этого я сделал переменную типа X509 и прочитал там свой фальшивый сертификат, после чего записал свой сертификат в пакет. Я создаю пару из самозаверяющего сертификата и ключа openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 –nodes, запускаю сервер openssl s_server -key key.pem -cert cert.pem -accept 443 –tls1 и подключаюсь к нему с помощью клиента openssl s_client localhost:443. Это то, что я вижу в wirehark. Как я могу заставить клиента видеть подписанный сертификат.

X509* PEM_to_509(char *f) {

X509* cert = NULL;
BIO* bio = NULL;
if (NULL == f) {
    return NULL;
}

bio = BIO_new_mem_buf(f, strlen(f));
if (NULL == bio) {
    return NULL;
}

cert = PEM_read_bio_X509(bio, NULL, NULL, NULL);
BIO_free(bio);
return cert;
  X509 *fake_cert;
  long fake_cert_pem_size;
  char *fake_cert_pem;
  FILE* fake_cert_pem_file;
  fake_cert_pem_file = fopen("/cert.pem", "r");
  fseek(fake_cert_pem_file, 0, SEEK_END);
  fake_cert_pem_size = ftell(fake_cert_pem_file);
  fseek(fake_cert_pem_file, 0, SEEK_SET);
  fake_cert_pem = malloc(fake_cert_pem_size + 1);
  fread(fake_cert_pem, 1, fake_cert_pem_size, fake_cert_pem_file);
  fake_cert_pem[fake_cert_pem_size] = 0;
  fclose(fake_cert_pem_file);
  fake_cert = PEM_to_509(fake_cert_pem);
  free(fake_cert_pem);

if(!ssl_add_cert_to_wpacket(s, pkt, fake_cert, 0))
      {
          X509_STORE_CTX_free(xs_ctx);
          return 0;

          }
      X509_STORE_CTX_free(xs_ctx);


[1]: https://i.stack.imgur.com/TjnLc.png
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...