从 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 代码获取此证书的示例 - 例如,如何在 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 似乎无法访问的本地机器证书存储中