実現したいこと
Linux(Ubuntu-20.04-LTS)上で動作するSSLサーバープログラム(OpenSSLを利用)が外部からリクエストを受けたときに,サーバープログラムがサーバー秘密鍵にアクセスする瞬間までにカーネルに要求する物理メモリのページ数を知りたいです.
上記を実現するために,以下の手順を考えています.
0. SSLサーバプログラムを起動し,そのサーバーに対して外部からSSL通信リクエストをかける
- 秘密鍵が格納されている仮想アドレスを特定し,プログラムがそのアドレスにアクセスした瞬間にプログラムを停止する
- 手順1から手順2の間にサーバープログラムがカーネルに要求したメモリページ数を記録する
###知りたいこと
上の手順2を実現するために,プログラムが持つ仮想アドレス空間中の指定したアドレスにプログラムがアクセスしたときにプログラムを停止させる方法はあるのでしょうか.
###SSLサーバソースコード
参考までに,OpenSSLを用いた簡易SSLサーバープログラムを載せておきます.
C++
1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4#include <unistd.h> 5#include <sys/socket.h> 6#include <arpa/inet.h> 7#include <iostream> 8 9#include <openssl/ssl.h> 10#include <openssl/err.h> 11#include <openssl/crypto.h> 12#include <openssl/x509.h> 13//#include "./include/dump.h" 14 15using namespace std; 16 17int main() { 18 SSL_CTX *ctx; 19 SSL *ssl; 20 21 int ret; 22 int server, client, sd; 23 int port = 1234; 24 const char crt_file[] = "/home/fuden/ssl/server.crt"; 25 const char key_file[] = "/home/fuden/ssl/server.key"; 26 27 struct sockaddr_in addr; 28 socklen_t size = sizeof(struct sockaddr_in); 29 30 char buf[1024]; 31 32 char body[] = "Hello World"; 33 char header[] = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Length: 11\r\nConnection: keep-alive\r\n"; 34 char msg[1024]; 35 36 SSL_load_error_strings(); 37 SSL_library_init(); 38 OpenSSL_add_all_algorithms(); 39 40 ctx = SSL_CTX_new(TLS_server_method()); 41 SSL_CTX_use_certificate_file(ctx, crt_file, SSL_FILETYPE_PEM); 42 SSL_CTX_use_PrivateKey_file(ctx, key_file, SSL_FILETYPE_PEM); 43 44 server = socket(PF_INET, SOCK_STREAM, 0); 45 bzero(&addr, sizeof(addr)); 46 addr.sin_family = AF_INET; 47 addr.sin_addr.s_addr = INADDR_ANY; 48 addr.sin_port = htons(port); 49 50 bind(server, (struct sockaddr*)&addr, sizeof(addr)); 51 listen(server, 10); 52 53 while(1) { 54 client = accept(server, (struct sockaddr*)&addr, &size); 55 56 ssl = SSL_new(ctx); 57 SSL_set_fd(ssl, client); 58 59 if (SSL_accept(ssl) > 0) { 60 SSL_read(ssl, buf, sizeof(buf)); 61 snprintf(msg, sizeof(msg), "%s\r\n%s", header, body); 62 SSL_write(ssl, msg, strlen(msg)); 63 } 64 65 sd = SSL_get_fd(ssl); 66 SSL_free(ssl); 67 close(sd); 68 } 69 70 close(server); 71 SSL_CTX_free(ctx); 72 73 return EXIT_SUCCESS; 74}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/30 12:46
2020/06/30 13:02
2020/06/30 13:11
2020/06/30 14:38