我在从我的代码管理Azure证书有一些困难。事实上,我正在尝试使用Azure REST服务API(例如创建HTTP请求),以便从我的Azure网站了解我的服务状态。
它在本地调试中工作得很好,但我的web角色似乎对证书管理器有一些限制。以下是我所做的:
// this method stores a certificate from the resources
// to the local certificates manager
private X509Certificate2 StoreCertificate(Certificates certName)
{
X509Certificate2 newCert = null;
// get certificate from resources
newCert = this.GetCertificateFromResources(certName);
// store it into the local certificate manager
if (newCert != null)
{
var store = new X509Store(
StoreName.TrustedPeople,
StoreLocation.LocalMachine
);
store.Open(OpenFlags.ReadWrite);
store.Add(newCert);
}
// reset ref and try to load it from manager
newCert = null;
newCert = this.GetCertificate(certName);
return newCert;
}
当我尝试添加证书时,附加一个访问被拒绝错误。
你知道吗?我可以将证书存储到Azure虚拟机中吗?我应该使用一个特殊的位置来存储它们吗?
您是否使用云服务(web/worker角色)?如果有,是哪个操作系统家族?我看到过一些报告,对于使用OS家族3的工作角色,您需要以更高的权限运行该角色,以便从本地证书存储区读取证书。不确定这是否也适用于web角色和添加到证书存储。
服务证书是否也通过Azure管理门户(或通过REST API或PowerShell)添加?
我发现了很多东西:
- 我在一个网站上部署我的代码,所以我不能在Azure中向共享虚拟机添加证书
- 我试图在远程桌面会话中连接虚拟机,我手动添加了一个证书。
即使在这种情况下,我在InvalidOperationException中有一个(403)Forbidden错误。
下面是当前的状态:
- 已创建证书(makecert)并手动添加到托管我的web角色的VM中(部署在服务中)
- 此证书已上载到Azure帐户证书和Azure服务证书(部署我的web角色的证书)
- 此证书的拇指指纹已添加到我的代码中,当我的代码执行时,我可以访问证书
两个问题:
- 我要怎么处理我的证书?
- 当我在Azure模拟器中本地尝试我的web角色时,一切正常。在发布/部署步骤中是否需要更新特殊设置?
谢谢你的帮助。
为了节省其他开发人员的时间,以下是我解决主要问题的方法:
- 连接到部署web角色的VM:参见there
- 创建证书:见这里
- 最终使用证书管理器(mmc.exe)
证书可以从代码中获得