java - 如何直接从 Java 访问 Azure/IIS 证书?

标签 java iis azure certificate keystore

从 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 控制台的服务器证书中查看证书。

从 Java 端...

当您使用 Java 连接到“Windows-MY” keystore 时

KeyStore keystore = KeyStore.getInstance("Windows-MY");
keystore.load(null, null);

然后查找可用的 keystore ,没有看到此证书。如果我们通过 RDP 进入 Azure 实例并通过 certmgr.msc 手动添加证书,那么我们的 Java 进程确实会使用“Windows-MY” keystore 看到该证书。

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

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

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

谢谢

更新(5 月 20 日)

有人建议我们在 ServiceDefinition.csdef 文件中使用 storeLocation="CurrentUser",这听起来应该可以完成这项工作,例如

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

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

最佳答案

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

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

关于java - 如何直接从 Java 访问 Azure/IIS 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10630550/

相关文章:

java - 如果我在 Java 中使用 BufferedReader 进行流式传输,是否存在资源泄漏

java - 使用 Mockito 模拟静态方法

asp.net-mvc - Azure 应用程序服务非 www 到 www 重定向规则以忽略 cdn 域

api - Azure 中的 BadRequest on/metrics REST 端点

java - 当我使用 akka 流在现有消费者组中创建新消费者时,如何寻求 kafka 主题的结束?

java - 在 jTextField 中输入和显示 unicode 字符

android - IIS Express MVC 远程调试 SSL 连接错误

asp.net - 如何编辑 web.config 以停止为 .NET Web 应用程序的特定文件类型提供服务

azure - 使用 powershell 部署到 azure 函数

azure - 我从 Azure 通用工件下载了工件,但下载的是哪个路径