【问题标题】:How do you access an Azure / IIS certificate directly from Java?如何直接从 Java 访问 Azure / IIS 证书?
【发布时间】:2012-05-24 17:23:33
【问题描述】:

从 Azure / Windows 方面...

当您按照http://msdn.microsoft.com/en-us/library/windowsazure/ff795779.aspx#upload 的步骤操作时,ServiceConfiguration.Cloud.cscfg 包含例如

<Certificates>
  <Certificate name="www.myserver.com" 
    thumbprint="ad513653e4560fe4afce5bdac88c744fbcf93525" 
    thumbprintAlgorithm="sha1"/>
</Certificates>

和 ServiceDefinition.build.csdef 包含,例如

<Endpoints>
  <InputEndpoint name="HttpIn" port="80" protocol="tcp" />
  <InputEndpoint name="HttpsIn" protocol="tcp" port="443"/>
</Endpoints>
<Certificates>
  <Certificate name="www.myserver.com" 
    thumbprint="AD513653E4560FE4AFCE5BDAC88C744FBCF93525" 
    thumbprintAlgorithm="sha1" />
</Certificates>

带有此指纹的证书通过 Azure 平台 Web 控制台上传到我们的托管服务,然后在 Azure 实例启动时将证书部署到 IIS 中的服务器证书。我们可以 RDP 进入实例并在 IIS 控制台的 Server Certificates 中查看证书。

从 Java 方面...

当您使用

连接到 Java 中的“Windows-MY”密钥库时
KeyStore keystore = KeyStore.getInstance("Windows-MY");
keystore.load(null, null);

然后寻找可用的密钥库,你看不到这个证书。如果我们 RDP 进入 Azure 实例并通过 certmgr.msc 手动添加证书,那么我们的 Java 进程确实会看到使用“Windows-MY”密钥库的证书。

我看到了许多 Java / Azure 证书集成的示例 - 例如。 http://blogs.msdn.com/b/avkashchauhan/archive/2010/11/07/adding-ssl-https-security-with-tomcat-java-solution-in-windows-azure.aspx - 证书导出到密钥库文件,然后与 azure 包一起部署,但我们希望找到一种方法,可以独立于包构建并使用标准 Azure 证书管理方法来管理证书。请注意,我们无权访问要使用的证书,因为它是由另一方管理的。

我还看到了如何使用 .net 代码获取此证书的示例 - 例如How can you get a certificate in code on Windows Azure.

您将如何直接从 Java 访问此 Azure 部署的证书?它是否部署到“Windows-MY”以外的另一个密钥库中?您可以直接从 Java 访问 IIS 中的服务器证书中的证书吗?

谢谢,

更新(5 月 20 日)

我们从某人那里得到了使用 ServiceDefinition.csdef 文件中的 storeLocation="CurrentUser" 的提示,这听起来应该可以完成这项工作,例如

<Certificate name="www.myserver.com" 
  storeLocation="CurrentUser" storeName="My" />

但是由于某种原因,Azure 似乎没有将证书部署到 CurrentUser 存储。如果 storeLocation 设置为 LocalMachine(如上所述),我只会看到部署到服务器的证书,这最终会出现在 Java 似乎无法访问的本地机器证书存储中

【问题讨论】:

    标签: java iis azure certificate keystore


    【解决方案1】:

    根据this article,只有 Windows-MY 和 Windows-ROOT 作为可能的 Windows 证书存储提供程序。 Azure 管理的证书存储在本地计算机的个人证书中,因此似乎无法通过 Keystore API 访问。

    作为一种解决方法,您可以尝试通过本机 API(例如,通过 JNI 或 jna)获取证书,或者编写一个包装可执行文件(例如,用本机 c++ 或 .net 编写),为您的 java 进程提供所需的证书.

    【讨论】:

      【解决方案2】:

      您可以执行以下操作:

      Java access to intermediate CAs from Windows keystores?

      在这方面,他们正在使用来自其他商店的证书构建证书链。因此,使用它,我认为您将能够访问证书。

      【讨论】:

      • 感谢您提供的指针,但是当前用户存储(即 Windows-MY)没有任何证书可供枚举,我认为该答案中的技术只有在证书 I正在寻找的是在链中。不过我会用这种方法做一些实验。
      猜你喜欢
      • 2014-06-03
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      • 2017-04-22
      • 1970-01-01
      • 2013-01-07
      • 2015-06-30
      • 2015-03-21
      相关资源
      最近更新 更多