Thinktecture IdentityServer v3指南 - 证书

时间:2014-10-30 13:17:24

标签: azure certificate thinktecture-ident-server

我正在研究Thinktecture IdentityServer v3的演示。目的是让身份服务器在Azure网站下运行它自己的网站。

将有其他(多个)Azure网站将使用身份服务器对用户进行身份验证。

根据入门演练(请参阅https://github.com/thinktecture/Thinktecture.IdentityServer.v3/wiki/Getting-started),我的主要是

我遇到麻烦的地方是证书。

对于演示,我想创建自己的证书 - 但我不确定我需要做什么。任何指导都会有所帮助。

我对此有其他疑问:

  1. 是否可以使用自签名证书?
  2. 在生产方案中,自签名证书是否可以接受,或者它们是否真的需要由受信任的根颁发机构签名?
  3. 如何将这些证书安装到Azure网站(或者我可以从磁盘加载)

2 个答案:

答案 0 :(得分:21)

嗯 - 严格来说,你需要两个证书 - 一个用于SSL,一个用于签名 - 技术上它们可以是相同的 - 但不必。他们也有不同的要求。

对于SSL - 您需要拥有一个位于客户可信列表中的证书。通常,这可以是商业CA的证书 - 也可以是内部PKI。

对于签名证书 - 您可以生成自己的 - 例如使用makecert。

IdSrv在加载证书时非常灵活 - 您可以从任意来源检索它们 - 通常来自Windows证书存储(当您具有管理级别访问服务器时) - 或文件系统,或来自嵌入式资源。

我们的示例主机使用嵌入式资源方法,该方法适用于Azure网站。对于生产方案,您通常需要更大的灵活性(例如,翻转) - 所以我会考虑从例如加载它blob存储。

答案 1 :(得分:11)

扩展最小特权回答我认为“正确”的方法是将它们安装在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);
        }