从 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/