私はあなたがこれを行うことができると思いますが、あなたがそれをしようとしている方法ではありません。
SSL証明書は、公開暗号化キーをX.500構造にバインドするステートメントであり、CNまたはCommon Name要素を含みます。署名付き証明書とは、エンドユーザーに既知の公開鍵(ブラウザー内にある認証局(CA)証明書のスタック)を使用して、バインディングがサードパーティの認証局によって検証可能に証明されている証明書です。
ブラウザでSSLで保護されたWebサイトにアクセスすると、署名されたCNがブラウザに通知されます。 ブラウザーがそれをどう選択するかはブラウザー次第です。 私が知っているブラウザは、要求されたホスト名と比較し、それが異なる場合(または、その認証済みバインディングが分析に耐えられない場合、たとえば、署名証明書がブラウザに知られていないか、バインディングがアウトバウンドである場合)はエラーになります。最新のものですが、それは別の問題です。原則として、CNがFQDN(完全修飾ドメイン名)ではなくIPアドレスである公開署名付き証明書の取得を妨げるものは何もありません[1]が、ブラウザにCNとIPを魔法のように比較させるわけではありません要求されたホスト名ではなく、アドレス。
私はあなたの問題を解決する最も簡単な方法は自分のCAを開始することだと思います。これは簡単に行えます。また、多くの公開チュートリアルがあります。1つはここです。エンドユーザーがCAをブラウザーにインポートすると、作成したすべての証明書が信頼できるものとして受け入れられます。
次に、1つのIPアドレスで多くのNameVirtualHostサイトを実行したいという2番目の問題が発生する可能性があります。(TLSとは異なり)SSLネゴシエーションは接続上の他の何よりも前に発生するため、これは歴史的にはスーパーインパケートでした。つまり、クライアントが接続しようとしているホストをクライアントが言う前に、証明書に埋め込まれたCNがクライアントに知らされ、クライアントによって使用されます。
最近、SNI(Server Name Indication)と呼ばれるプロトコル拡張機能が導入されたようです。これにより、SSL証明書が提示される前にクライアントとサーバーがホスト名に関することを行い、セットの正しいものを許可することを示すことができますサーバーによって与えられるべき証明書の。どうやらこれには、OpenSSLの十分に新しいバージョンであるApache 2.2.10と、(重要なことに)クライアント側のサポートが必要です。
したがって、私があなたがしようとしていることをしなければならなかった場合、私は自分のCA証明書を作成し、SNIをサポートするブラウザを使用してCAルート証明書をインポートする必要があることをエンドユーザーに伝え、バグトラックサイトごとに自分のSSL証明書に署名します。
[1]わかりました、あなたはそれをする人を誰も見つけていないかもしれませんが、それは実装の詳細です。ここで紹介しようとしているのは、あなたがそうしたとしても、それはあなたの問題を解決しないということです。