ncat を使用する (curl の代わり・サーバー)
curl コマンドは現在 gemini: をサポートしていませんが、
ncat を用いて近い動作を行う事ができます。
ncat は nc コマンドに SSL 等をサポートしたものです。
Ncat | nmap.org
OS によってはパッケージで ncat が含まれていて、
容易にインストールできるでしょう。
関連資料として、次をリンクします。
Twins | MakerSpace (https:)
- - - 🎈 - - -
Gemini クライアント
例えば次のようにします。
echo "gemini://fusen.nya.je/anko.gmi" | ncat -C --ssl fusen.nya.je 1965
ステータスコードも含めて表示されます。
表示のみなので、30・31 の転送は考慮されません。
openssl を用いてもできるのですが、ncat だとよりシンプルで使いやすくできます。
printf "gemini://fusen.nya.je/anko.gmi\r\n" | \
openssl s_client -ign_eof -connect fusen.nya.je:1965
オプション -quiet を含めるといくらか出力は短くなります。
- - - 🎈 - - -
Gemini サーバー
ncat は簡易な Gemini サーバーも実現します。
ncat 自身で一時的な SSL 証明書と暗号鍵を生成できるのですが、
承認されていないため、クライアントによっては表示できません。
まだ作成していなければ openssl を用いて作成します。.pem 形式である必要があります。
ここでは localhost で期限を約 1000 年にして作成する例です。
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem \
-days 365000 -nodes -subj "/CN=localhost"
日数の代わりに期限日時を指定する方法もあります。
9999年12月31日23時59分59秒を期限とする場合は次のとおりです。
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem \
-not_after 99991231235959 -nodes -subj "/CN=localhost"
Agate だと .der 形式が使われているので .pem 形式への変換が必要です。
openssl x509 -inform der -in cert.der -outform pem -out cert.pem
openssl pkey -inform der -in key.der -outform pem -out key.pem
.pem 形式はテキストエディタで開くと
-----BEGIN CERTIFICATE----- や -----BEGIN PRIVATE KEY----- ではじまる
テキストファイルになっています。
.der はバイナリーファイルなので文字化けした内容になっています。
cert.pem と key.prm があるディレクトリにいる状態で、次のようにします。
while true; do { printf "20 text/gemini\r\n"; printf "Hello Gemini\r\n"; } | \
ncat -l -p 1965 --ssl --ssl-cert cert.pem --ssl-key key.pem; done
クライアントで gemini://localhost/ を参照して
Hello Gemini! と表示されるのを確認します。
ターミナル・端末をもう一つ開き(タブまたはウインドウなど)
確認する事も可能です。
echo "gemini://localhost/" | ncat -C --ssl localhost 1965
CGI として server.sh を作成し、サーバー応答するのも簡単です。
chmod +x server.sh で実行権限を付けておきます。
while true; do ./server.sh | \
ncat -l -p 1965 --ssl --ssl-cert cert.pem --ssl-key key.pem; done
CGI に対応した Gemini サーバーを用いるよりもオーバーヘッドが減り、
レスポンスも素早くなる事我で期待できますが、
バーチャルホストには対応していないので、サーバー名に関係なく応答し、
ドメイン毎に異なる証明書を使用する事もできません。
また、公開されている Gemini サーバーでは PATH_INFO や QUERY_STRING を渡しますが、
ここでの方法では全く入っていない事にもご注意下さい。
サーバースペックや出力内容によっては ncat を用いるサーバー運用も有効でしょう。
- - - 🎈 - - -
🎈 fusen.nya.je
- - - 🎈 - - -
😺 Powered by nya.je