当社の Web サービスは、次のコードを含むサードパーティ ライブラリをラップしています。
IIS 6 アプリケーション プールで Active Directory サービス アカウントを使用しています (対話型ログイン機能はありません)。「指定されたファイルが見つかりません」というエラーでサービスが失敗します。エラーの原因をRSACryptoServiceProvider provider = new RSACryptoServiceProvider();
. サード パーティのアセンブリは、暗号化プロセスを x509 ファイル ベースの証明書に依存しており、サービス アカウントにはキー フォルダーへの読み取り/書き込みアクセス権があります。さらに、サービス アカウントには、次に対する読み取り、書き込み、変更の権限があります。
「C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys」.
コード:
StringBuilder builder = new StringBuilder(publicKeyData);
builder.Replace("-----BEGIN CERTIFICATE-----", "");
builder.Replace("-----END CERTIFICATE-----", "");
X509Certificate2 certificate = new X509Certificate2( Convert.FromBase64String(builder.ToString()));
string xmlString = certificate.PublicKey.Key.ToXmlString(false);
RSACryptoServiceProvider provider = new RSACryptoServiceProvider(); //BOOM
CspKeyContainerInfo containerInfo = provider.CspKeyContainerInfo;
provider.PersistKeyInCsp = false;
provider.FromXmlString(xmlString);
loadedKeys.Add(key, provider);
provider2 = provider;
FileMon をクラックして開いたところ、その AppPool に FILE NOT FOUND があり、その後にまったく同じファイルに別の SUCCESS があることに気付きました。
私はここで私の要素から外れています。なぜこれが見られるのかについて誰か考えがありますか?