Skip to content

Instantly share code, notes, and snippets.

@mumumu
Last active September 25, 2018 13:24
Show Gist options
  • Save mumumu/650461670436c52a74b06e04725f78ab to your computer and use it in GitHub Desktop.
Save mumumu/650461670436c52a74b06e04725f78ab to your computer and use it in GitHub Desktop.
couriertls の TLS_PRIVATE_KEY 対応方針

couriertls の TLS_PRIVATE_KEY 対応方針

ここでは、下記チケットの対応方針について述べる
svarshavchik/courier#10

前提

couriertls(1) には client モードと server モードがある。

client モードは、 couriertls が TLSクライアントとして動作するときのモードを実装するものである。server モードはその対になるもので、courirertls がサーバとして動作するときのモードを実装するものである。

このモードのいずれになるかは、 -server オプションを指定するかによって決まる

1. OpenSSL/GnuTLS 両方に対応する

GnuTLS と OpenSSL の両方に対応することで、以下のようなデメリットがあるのは明らかだが、メンテナとしてはそういう方針だ

  • 追加のメンテナンスコストが必要
  • どちらかのみでしか使えない設定項目が存在し、混乱を招きやすい

2. OpenSSL では、client モードは対応不要

client モードの場合、クライアント認証の場合の自分の証明書を送る機能があるが、OpenSSL では呼び出し側のコールバックを実装しない限り対応不要である。

server モードの場合、TLS_CERTFILE をベースにサーバの認証を行うので、対応が必要なのはもちろん、SNI や IP ベースのバーチャルのホストにも対応が必要である。

3. GnuTLS では、server モードと clientモードの両方に対応する

上記で述べた通り、client モードのクライアント認証の場合、OpenSSL では対応不要だが、GnuTLS では対応が必要である。
なぜなら、TLS_CERTFILE をクライアント認証の証明書として送る機能が実装されているためである。

但し、clientモードの場合、バーチャルホストやSNIには対応不要である。TLSクライアントは複数のホストを区別する必要がないからである。これに対して、serverモードの場合は、OpenSSL と同様、SNI やバーチャルホストの対応が必要である

まとめ

  • ○ → 対応必須
  • × → 対応不要
TLSライブラリ serverモード serverモード(バーチャルホスト) clientモード clientモード(バーチャルホスト)
OpenSSL × ×
GnuTLS ×
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment