我对证书和所有这些东西有点陌生。
我有一个web应用程序,通过iframe发送https请求(它必须是https,因为应用程序本身也是https)到客户端上运行的. net应用程序,该应用程序有一个HttpListener监听https://localhost:[端口],因此客户端应用程序可以从浏览器点击接收"现在做点什么"。
当我安装客户端应用程序时,我安装了*。crt文件到根存储并绑定到我们的端口:
X509Certificate2 certificateFromCrtFile = new X509Certificate2(X509Certificate2.CreateFromCertFile(crtPath));
X509Store rootStore = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
rootStore.Open(OpenFlags.ReadWrite);
rootStore.Add(certificateFromCrtFile);
rootStore.Close();
string crtThumbprint = certificateFromCrtFile.Thumbprint;
string netshParams = string.Format("http add sslcert ipport=0.0.0.0:[port] certhash={0} appid={{{1}}}", crtThumbprint, Guid.NewGuid());
Utilities.StartProcess("netsh.exe", Environment.SystemDirectory, netshParams, true, true);
现在,在此之前,我必须在个人存储中安装证书,因为在这种情况下,我的"服务器"是同一客户机上的HttpListener。
好的,我可以这样做:
X509Certificate2 certificateFromPfxFile = new X509Certificate2(pfxPath, "pwd");
X509Store personalStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);
personalStore.Open(OpenFlags.ReadWrite);
personalStore.Add(certificateFromPfxFile);
personalStore.Close();
在这种情况下,我必须写*。PFX密码在明文代码。如果我没理解错的话,用这个密码你可以很容易地得到私钥,对吗?
在PFX中存储时,私钥与您的密码一起加密。因此,当您试图将其安装到个人存储库以表明您对该证书的所有权时,您必须提供密码。这就是授权。
受信任的根权限是不同的,因为您不拥有证书。你只需安装crt文件,表明你信任拥有它们的人。