まず第一に、SNIサポートのないすべてのクライアントに使用する証明書を1つ指定できるようにする必要があります。これは、そのIPアドレスでホストされているすべてのドメインを意味します。SNIを使用せずに少なくとも1つのドメインをクライアントで機能させることができます。
次に、httpからhttpsにリダイレクトするときにできることは、2段階のリダイレクトです。httpからhttpsへの最初のリダイレクトはドメイン名を使用します。これは、SNIサポートの有無にかかわらず動作することを確認したものです。このhttpsサイトから後で適切なURLにリダイレクトできるように、完全な元のURLを含める必要があります。
SNIの有無にかかわらず機能するドメイン名は、SNIがクライアントによってサポートされているかどうかによって異なる動作をする場合があります。これにより、SNIを必要とするドメインにリダイレクトする前に、クライアントがSNIをサポートしていることがわかります。
Apacheでこれを正確に構成する方法は、私の側から少し推測されます(複数の証明書でApacheを構成したことがないため)。それを行う方法は、中間ドメインを含むすべてのドメインの名前ベースの仮想ホストを作成することだと思います。
次に、SNIを使用しないクライアント用のデフォルトの仮想ホストを作成します。これは、名前を使用するものと同じ証明書を使用します。同じ証明書を持つ2つの仮想ホストは、SNIをサポートしているかどうかに応じて、クライアントに異なるリダイレクトを送信します。
最後に、サーバーでIPv6を有効にします。IPv6を使用すると、各仮想ホストに1つを割り当てることができる十分なIPアドレスを取得できます。同じ仮想ホストのセットにIPv4に基づく名前とIPv6に基づくIPを付けることができるため、この方法で構成を複製する必要はありません。
最終結果は、クライアントがSNIまたはIPv6のいずれかをサポートしている限り機能するセットアップになります。この場合、どちらもサポートしていないクライアントだけが問題を抱えますが、それらを検出して、別のリダイレクトまたはエラーメッセージをサーバーで処理することができます。
CAを好まないクライアントについては、私の唯一の提案は、ユーザーエージェントによってクライアントを認識し、適切と思われる方法で処理することです。httpsサイトへのリンクがあることを確認してください。誤って多数のクライアントを含めた場合に備えて、それらのリンクをクリックできます。