このリポジトリには、SCTPおよびUDPを介したDTLSの例が含まれています。 srcの各アプリケーションは、クライアントまたはサーバーとして使用できます。
私たちの例は、OpenSSL 1.1.x APIに対して開発されています。
OpenSSLバージョン1.1.1A以降を使用します。
DTLSエコーサーバーとクライアント
このサンプルには、DTLSで暗号化されたSCTP/UDP接続を介してメッセージを送信するマルチスレッドエコーサーバーとクライアントが含まれています。
Usage: dtls_(udp|sctp)_echo [options] [address]
Options:
-l message length (default: 100 Bytes)
-L local address
-p port (default: 23232)
-n number of messages to send (default: 5)
-v verbose
-V very verbose
DTLS文字ジェネレーターサーバーとクライアント
このサンプルには、特定の時間の間DTLSで暗号化されたSCTP/UDP接続を介して、マルチスレッド文字ジェネレーターサーバーとクライアントができるだけ多くのメッセージを相互に送信するクライアントが含まれています。統計で送信および受信されたメッセージの数と、最後に紛失したメッセージの数が印刷されます。
Usage: dtls_(udp|sctp)_chargen [options] [address]
Options
-l message length (default: 100 Bytes)
-L local address
-s streams (default: 5, sctp only)
-p port (default: 23232)
-t time to send (default: 10 sec)
-u unordered (sctp only)
-v verbose
-V very verbose
DTLSサーバーとクライアントを破棄します
このサンプルには、DTLSで暗号化されたSCTP/UDP接続を介してメッセージを送信するマルチスレッド廃棄サーバーとクライアントが含まれています。
Usage: dtls_(udp|sctp)_discard [options] [address]
Options:
-l message length (Default: 100 Bytes)
-L local address
-s streams (default: 5, sctp only)
-p port (default: 23232)
-t time to send (Default: 10 sec)
-u unordered (sctp only)
-v verbose
-V very verbose
FreeBSD 12.0以降、組み込みのOpenSSLバージョンはUDPの例を実行するのに十分です。
SCTPの例とFreeBSDの古いバージョンでは、OpenSSLをpkgまたはゼロからインストールする必要があります。
FreeBSD 12.0および11.2の場合、 pkgのOpenSSL 1.1.1パッケージはopenssl111です。
$ pkg install openssl111
UDPの例は、最近のLinux分布ですぐに機能する必要があります。 SCTPの例を実行するには、OpenSSLをSCTPサポートを使用してゼロから構築する必要があります。
sudo apt-get install libsctp-dev
$ ./config sctp --prefix=$HOME/my-openssl/
$ make
$ make install
ロードされたSCTPモジュールに加えて、LinuxにはSCTP認証サポートが必要です。
$ modprobe sctp
$ sysctl -w net.sctp.auth_enable=1
UDPの例のみを実行したい場合は、Brewを介して事前に構築されたOpenSSLバイナリをインストールできます。
$ brew install [email protected]
SCTP対応のOpenSSLバージョンをソースからコンパイルする必要があります。Linuxセクションのチュートリアルに従ってください。 MacOSは箱から出してSCTPをサポートしていないため、SCTP NKEを使用する必要があります。
srcディレクトリでmakeを呼び出す前に、カスタムライブラリを指定してパスを含める必要がある場合があります。これは、 MakeFileを変更するか、パスをコマンドライン引数として提供することによって行われます。 SCTPまたはUDPの例のみを構築することもできます。
$ make
$ make sctp # only SCTP examples
$ make udp # only UDP examples
サンプルプログラムを実行するには、必要なサーバーとクライアントの証明書をcertsサブフォルダーに配置する必要があります。
次のコマンドは、上記のサンプルのクライアントとサーバーの署名済み証明書を作成します。
touch ca-db-index
echo 01 > ca-db-serial
# Certificate Authority
openssl req -nodes -x509 -newkey rsa:2048 -days 365 -keyout ca-key.pem -out ca-cert.pem
# Server Certificate
openssl req -nodes -new -newkey rsa:2048 -keyout server-key.pem -out server.csr
# Sign Server Certificate
openssl ca -config ca.conf -days 365 -in server.csr -out server-cert.pem
# Client Certificate
openssl req -nodes -new -newkey rsa:2048 -keyout client-key.pem -out client.csr
# Sign Client Certificate
openssl ca -config ca.conf -days 365 -in client.csr -out client-cert.pem
独自のCA.CONFファイルを作成するか、最小限のサンプルを使用できます。
例は、互いに使用されることに限定されず、組み込みのOpenSSLアプリケーションでも使用できます。
以下の例は、SCTPエコーサーバーを開始します。クライアントは、OpenSSLのs_clientアプリケーションを介して接続し、 stdinからサーバーに入力読み取りを送信します。サーバーはメッセージを受信しました。
$ dtls_sctp_echo -V -L 127.0.0.1
$ openssl s_client -sctp -dtls -connect 127.0.0.1:23232