前回の続き
前回、MCPサーバーに認証機能を実装し、そろそろWireSharkで通信内容を確認するなどのデバッグも不要になってきたので、MCPサーバー自体の通信も https で暗号化していきたいと思います。
MongooseをHTTPS化する
Mongooseのドキュメントに記載されていますので、その内容に従って変更を加えます。
void McpServer::cbEvHander(void* connection, int event_code, void* event_data)
{
:
+ if (event_code == MG_EV_ACCEPT)
+ {
+ struct mg_tls_opts opts =
+ {
+ .cert = mg_file_read(&mg_fs_posix, "cert.pem"), // 証明書を設定
+ .key = mg_file_read(&mg_fs_posix, "key.pem") // 秘密鍵を設定
+ };
+ mg_tls_init(conn, &opts);
+ }
else if (event_code == MG_EV_HTTP_MSG)
{
:
クライアントが接続してきたときに、TLSの初期化を行うということだと思います。
後は、以下のコンパイルオプションを追加
-DMG_TLS=MG_TLS_OPENSSL
前回、認証処理を実装する際に、OpenSSLのリンクを追加していたので、Mongoose組み込みのTLSではなく、OpenSSLを使うように設定しました。
自己署名を作成
こちらも同様にMongooseのドキュメントにも記載されていますが、以下のようなコマンドで作成します。
openssl req -nodes -new -x509 -keyout key.pem -out cert.pem
これで、先ほどの実装で設定していた、key.pem と cert.pem ファイルが用意できました。
MCP Inspectorを自己署名に対応
MCP InspectorというかNode.jsが自己署名だとリジェクトしてしまうため、設定を変更してから起動します。
※あくまでもテスト用なので、このあたりの設定は試した後で元に戻すなど、ご注意ください。
> set NODE_TLS_REJECT_UNAUTHORIZED="0"
> npx @modelcontextprotocol/inspector
あとは、MCP Inspectorで接続先を、http から https に変更するだけ。
簡単ですね。
ただ、Auth0 での認証機能を使う場合は、前回APIのIDを http で作成してしまっているので、そちらを https で作り直す必要があるのだろうと思います。
おわりに
そろそろ、MCPサーバー自体の作りこみを進めていき、LLMと組み合わせて動作させることで、自然語で自分の作ったアプリをコントロールしてみたいなと思います。