web-dev-qa-db-ja.com

Thinktecture IdentityServerv3に関するガイダンス-証明書

Thinktecture IdentityServerv3のデモを作成しています。目的は、IDサーバーをAzureWebサイトの下の独自のWebサイトとして実行することです。

IDサーバーを使用してユーザーを認証する他の(複数の)AzureWebサイトがあります。

入門チュートリアルに基づく( https://github.com/thinktecture/Thinktecture.IdentityServer.v3/wiki/Getting-started を参照)私はこれを持っていますほとんど動作しています。

私が問題を抱えているのは証明書です。

デモでは、独自の証明書を作成したいのですが、何をする必要があるのか​​わかりません。どんなガイダンスも役に立ちます。

私がこれに関して持っている他の質問:

  1. 自己署名証明書は使用できますか?
  2. 本番シナリオでは、自己署名証明書を使用できますか、それとも信頼できるルート機関による署名が本当に必要ですか?
  3. これらの証明書をAzureWebサイトにどのようにインストールしますか(またはディスクからロードできますか)
20
Brendan Green

厳密に言えば、SSL用と署名用の2つの証明書が必要です。技術的には同じである可能性がありますが、必ずしもそうする必要はありません。また、要件も異なります。

SSLの場合-クライアントの信頼できるリストにある証明書が必要です。通常、これは商用CAまたは内部PKIからの証明書です。

署名証明書の場合-独自に生成できます-例: makecertを使用します。

IdSrvは、証明書の読み込みに非常に柔軟性があります。証明書は、任意のソースから取得できます。通常は、Windows証明書ストア(サーバーへの管理者レベルのアクセス権がある場合)、ファイルシステム、または組み込みリソースから取得できます。

サンプルホストは、AzureWebサイトで正常に機能する埋め込みリソースアプローチを使用しています。本番シナリオでは、通常、より柔軟性が必要です(ロールオーバーなど)。そのため、たとえば、ブロブストレージ。

21
leastprivilege

特権が最も少ない回答を拡張すると、「適切な」方法はAzureトラストストアにインストールすることだと思いますが、私の場合は、idsrv3の例のように埋め込みリソースから提供しました。

これが私のために働いたいくつかの詳細です。自己署名証明書の作成:

        "C:\Program Files (x86)\Windows Kits\8.1\bin\x64\makecert.exe" -r -pe -n "CN=MyAppIdentity" -sky signature MyApp.cer -sv MyApp.pvk
        "C:\Program Files (x86)\Windows Kits\8.1\bin\x64\pvk2pfx.exe" -pvk MyApp.pvk -spc MyApp.cer -pfx MyApp.pfx -pi MyPassword -po MyPassword

Pvk2pfx.exeのドキュメントにも関わらず、-poが指定されていない場合、pfxはpvkと同じパスワードを保持せず、X509Certificate2()はパスワードの問題で失敗することがわかりました。

Idsrv3サンプル証明書は、idsrv3サンプルコードを使用して、Azureで正常に機能しました。

        var Assembly = typeof(Certificate).Assembly;
        using (var stream = Assembly.GetManifestResourceStream("MyCompany.Identity.Website.Config.idsrv3test.pfx"))
        {
            return new X509Certificate2(ReadStream(stream), "idsrv3test");
        }

ただし、独自の証明書を作成した場合、上記のコードを使用したローカルテストでは正常に機能しましたが、Azureでは、機能させるためにいくつかのフラグを追加する必要がありました。これらを使用することの意味は必ずしもわかりませんが、機能するので、それが始まりです。

        using (var stream = Assembly.GetManifestResourceStream("MyCompany.Identity.Website.Config.MyApp.pfx"))
        {
            return new X509Certificate2(ReadStream(stream), 
                "MyPassword", 
                X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
        }
11
bitcoder