SSL に使用する証明書の構成

ネイティブ XML Web サービスは推奨されません。この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新しい開発作業では、この機能の使用を避け、現在この機能を使用しているアプリケーションは修正するようにしてください。

SSL (Secure Sockets Layer) 通信を行う場合、HTTP サーバーには、SSL で使用するために有効になっているソケット (IP アドレスとポートの組み合わせ) ごとに登録された証明書が必要です。証明書は、サーバー認証用に承認されている必要があります。証明書を承認するには、Verisign などの証明書発行機関から SSL 証明書を取得します。テスト目的の場合は、ツールを使用して独自の証明書を発行および作成します。

証明書は、取得したか独自に発行したかにかかわらず、サーバーに登録する必要があります。SSL 証明書を登録、照会、および削除する場合は、HTTP Configuration Utility (HttpCfg.exe) を使用することをお勧めします。

証明書を登録するには、次のコマンドを使用します。

httpcfg set ssl /i IP:Port /h Hash /g Guid

引数

IP:Port

証明書の登録時に使用する IP アドレスとポートの組み合わせ。

Hash

証明書ハッシュ。

注意

証明書ハッシュは、証明書ストアから取得できます。証明書ストアは、証明書スナップインか、CertUtil などのコマンド ライン ツールを使用して表示できます。

Guid

証明書を登録しているエンティティを識別する GUID 文字列。SQL Server のインスタンスごとに 1 つの GUID を作成し、そのインスタンスによって行われるすべての証明書の登録に同一の GUID を使用することをお勧めします。

IP:Port の SSL 証明書を登録すると、その IP:Port でリッスンするすべてのアプリケーションが影響を受けます。たとえば、SQL Server のインスタンスと IIS などの別のアプリケーションがどちらも同じ IP:Port (10.0.0.1:80) でリッスンしている場合、10.0.0.1:80 の SSL 証明書を登録している SQL Server のインスタンスが IIS に影響を与え、IIS と SQL Server のインスタンスが同じ共通の証明書を使用することになります。これは、カーネル モードの HTTP ドライバー (Http.sys) の制限によるものです。Http.sys が IP:Port 10.0.0.1:80 で要求を受信するとき、要求は暗号化されているため、Http.sys は URL を調べて SQL Server または IIS のどちらに要求が属しているかを判断することができません。Https.sys は、暗号化を解除した後にのみ、要求をルーティングできます。このため、Https.sys は、同じ IP:Port でリッスンしている異なる複数のアプリケーションに対し、別々の SSL 証明書を使用できません。

SQL Server を Windows Vista (または対応する Windows Server エディション) で実行している場合は、コンピューターの外部 IP アドレスに加えてローカル IP アドレス (IPv4: 127.0.0.1 または IPv6: [::1]) の証明書を明示的に登録して、"locahost" に SSL で接続できるようにする必要が生じる場合があります。SSL 証明書を登録するときに未指定アドレス (IPv4: 0.0.0.0 または IPv6: [::]) を指定する方法もあります。また、Windows Vista には、SSL 証明書の登録を支援するツールが新たに用意されており、httpcfg.exe ツールの代わりに使用できます。新しいコマンドは次のとおりです。

netsh http add sslcert ipport=IP:Port certhash=Hash appid=Guid

次に例を示します。

netsh http add sslcert ipport=[::]:443 certhash=<hash> appid=<guid>Examples

次の例では、証明書を登録します。

httpcfg set ssl /i 10.0.0.1:80 /h 2c8bfddf59a4a51a2a5b6186c22473108295624d 
/g "{2bb50d9c-7f6a-4d6f-873d-5aee7fb43290}"

登録済みの証明書をすべて表示するには、次のコマンドを使用します。

httpcfg query ssl

単一の証明書を表示するには、次のように /i オプションを使用します。

httpcfg query ssl /i IP:Port

引数

IP:Port

証明書の照会時に使用する IP アドレスとポートの組み合わせ。

httpcfg query ssl 
httpcfg query ssl /I 10.0.0.1:80

証明書を削除するには、次のように /i オプションを使用します。

httpcfg delete ssl /i IP:Port

引数

IP:Port

証明書の削除時に使用する IP アドレスとポートの組み合わせ。

httpcfg delete ssl /i 10.0.0.1:80

SQL Server でインターネット ベースのクライアントと SSL 通信を行うために必要な証明書は、Verisign などの証明機関から取得できます。

ただし、テスト目的の場合は、MakeCert.exe というツールを使用してテスト証明書を作成できます。MakeCert.exe は、.NET Framework SDK に含まれています。MakeCert.exe は、プラットフォーム SDK でも使用できます。SDK をダウンロードするには、Microsoft .NET Framework Developer Center および Microsoft ダウンロード センターにアクセスします。このツールでは、X.509 証明書が作成されます。また、デジタル署名の公開キーと秘密キーのペアが作成され、証明書ファイルに格納されます。さらに、指定したパブリッシャーにキー ペアが関連付けられ、ユーザーが指定した名前をキー ペアの公開部分にバインドする X.509 証明書が作成されます。

ホスト名 (MySQLServer) に応答するサーバーの SSL 証明書を作成するには、次のオプションを使用して MakeCert を実行できます。

makecert -r -pe -n CN="MySQLServer"-eku1.3.6.1.5.5.7.3.1-ssmy-srlocalmachine

-sky exchange -sp " Microsoft RSA SChannel Cryptographic Provider " -sy 12

コマンド ライン スイッチ

-r

自己署名入りの証明書を作成します。自己署名入りの証明書は、証明機関による署名がない証明書です。証明機関によって署名されていないので、SSL に必要な暗号化には使用できますが、サーバー認証には使用できません。

-n

サーバー名を指定します。この名前は、X.500 標準に準拠している必要があります。最も簡単な方法は、名前の前に CN= を付けて、二重引用符で囲んで指定する方法です。

-eku

コンマ区切りの、拡張キー用途オブジェクト識別子 (OID) の一覧を証明書に指定します。SQL Server の場合、1.3.6.1.5.5.7.3.1 (szOID_PKIX_KP_SERVER_AUTH) という OID を持つ、サーバー認証に対して有効な SSL 証明書が必要です。

-ss

作成された証明書を保存する証明書ストアを指定します。作成された証明書はどの証明書ストアにも保存できますが、my ストアに保存することをお勧めします。

-sr

証明書を格納する証明書ストアを指定します。currentuser (既定) または localmachine を指定できます。この証明書はサービス用に作成されているので、ローカル コンピューターに配置する必要があります。

-sky

証明書キーの種類を指定します。指定できるのは、signatureexchange、または 4 などの整数です。RSA 公開キー交換アルゴリズムの場合は、exchange にする必要があります。これは、セッション キーを暗号化および暗号化解除するために使用されるキーの種類です。

-sp

CryptoAPI プロバイダー名を指定します。SQL Server 用に作成された証明書の場合は、この値を Microsoft RSA SChannel Cryptographic Provider に設定できます。

-sy

CryptoAPI プロバイダーの種類を指定します。プロバイダーが Microsoft RSA SChannel Cryptographic Provider の場合、この値は 12 になります。

追加のコマンド ライン スイッチ

-b

証明書の有効期間の開始日を指定する mm/dd/yyyy 形式のデータ値。既定値は、証明書の作成日になります。

-e

証明書の有効期間の終了日を指定する mm/dd/yyyy 形式のデータ値。値を設定しなかった場合、既定値は 12/31/2039 11:59:59 GMT になります。

次の例では、追加オプションを指定した MakeCert を使用して証明書を作成します。

makecert -r -pe -n "CN= MySQLServerName" -b 01/01/2000 -e 01/01/2036 
    -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange 
    -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12

証明書が作成された後、証明書の MMC か CertUtil などのツールを使用して、証明書のハッシュを取得できます。CertUtil を使用すると、作成された証明書を一覧に追加できます。

C:\>certutil -store "my" "MySQLServerName"

================ Certificate 2 ================
Serial Number: e302d3a7a831c9884c0dd736f24825e6
Issuer: CN=MySQLServerName
Subject: CN=MySQLServerName
Signature matches Public Key
Root Certificate: Subject matches Issuer
Cert Hash(sha1): d2 2f 9a 7f 18 cb ed 13 a1 3e be e5 32 69 6c 4b ad ba b9 30
  Key Container = 956cbc46-f005-4aeb-b521-7c313f2ccd10
  Provider = Microsoft RSA SChannel Cryptographic Provider
Encryption test passed
CertUtil: -store command completed successfully.

CertUtil を実行した結果として取得されたハッシュは、自己署名入りの証明書を登録するために Httpcfg.exe ツールに渡すことができます。

MakeCert を使用して自己署名入りの SSL 証明書を作成し、その証明書を Http.sys に登録する前に、コンピューターに IIS がインストールされているかどうかを確認してください。IIS には、SSL 証明書を簡単に登録できるウィザードが用意されています。したがって、コンピューターに IIS が既にインストールされている場合は、SSL 証明書が既に Http.sys に登録されている可能性があります。証明書が登録されていない場合は、IIS のウィザードを使用して証明書を作成および登録できます。

SSL 証明書はコンピューター全体に影響を与えるので、SQL Server で使用する証明書の登録に IIS を使用するかどうかは重要ではありません。

  • SQL Server のインスタンスをアンインストールしても、Httpcfg.exe を使用して作成された SSL 証明書のバインドは、手動で削除しない限り削除されません。これらの設定は SQL Server セットアップを使用して作成されたものではないので、アンインストールにより削除されることはありません。したがって、SQL Server のインスタンスをアンインストールした場合は、それらのバインドも削除する必要があります。

  • SQL Server で HTTP を経由して SSL を使用するときに IIS は必要ありませんが、SQL Server のインスタンスと同時に IIS をインストールすると、HTTP SSL サービスが IIS の使用にリンクされます。たとえば、コマンド プロンプトで net stop iisadmin を使用するなどして IIS を停止すると、IIS により HTTP SSL サービスも停止されます。さらに、Windows に IIS をインストールした後は、IIS (Inetinfo.exe) を開始しない限り HTTP SSL サービスを開始できません。

表示: