のための完璧な仕事の一時ファイルです。
ファイルが表示された場合は消えます(「一時ファイル」と呼ばれています)ので、すべて正常に機能しています。それが永久に現れている場合、PushSharpは証明書をPersistKeySetでロードしています。これは、秘密鍵が削除されるべきではないことを示します。
https://github.com/has-taiar/PushSharp.Web/blob/master/PushSharp.Apple/ApplePushChannelSettings.csがApplePushChannelSettingsの実際のソースであるかどうかわかりませんが、それはできます。そのソースを見ると、彼らはPersistKeySet
を使用しているように見えます。
次の2つの実用的なアプローチがあります。
1)あなたが店の永続性のために必要があるため、負荷にPersistKeySetを使用して(1回の操作としてX509Storeに証明書をロードします)。ファイルは永久になりますが、永遠に使用されるので、すばらしいです。
2)PFXから自分で証明書をロードし、完了したら証明書を廃棄するのが理想的です。より安全に使用できるシャットダウン通知があるかどうかは分かりませんが、cert.Dispose()
(または古いフレームワークバージョンの場合はcert.Close()
)を呼び出すと、GCとFinalizerを待つよりも信頼性が高くなりますあなたのために清掃をしてください。
あなたは良いシャットダウンイベント持たない場合:いない場合は
// Note that I'm not specifying any X509KeyStorageFlags here.
// You don't want it PersistKeySet (that's the whole point) and you don't
// need it to be exportable (unless you get exceptions without Exportable, in which case
// PushSharp is doing something naughty).
private X509Certificate _cert = new X509Certificate2(appleCert, p12CerPass);
...
_broker.RegisterAppleService(new PushSharp.Apple.ApplePushChannelSettings(_cert, false));
...
// In some OnShutdown type location
_cert.Dispose();
を:
// Still don't specify any load flags. Especially not PersistKeySet.
var cert = new X509Certificate2(appleCert, p12CerPass);
_broker.RegisterAppleService(new PushSharp.Apple.ApplePushChannelSettings(cert, false));
どんなにあなたはまだ永久に漏洩したファイルを使用して、プロセスが異常終了するたびに終わるだろう何ファイル削除コードはキックインする機会を得ることができないからです。
一時ファイルの作成を完全に避けるための解決方法があります。それは、EphemeralKe .NET Core 2.0に追加されたySetフラグ(現在プレビュー中)。まだ.NET Frameworkでは利用できません。
// Keep the private key in memory, never let it touch the hard drive.
var cert = new X509Certificate2(appleCert, p12CerPass, X509KeyStorageFlags.EphemeralKeySet);
_broker.RegisterAppleService(new PushSharp.Apple.ApplePushChannelSettings(cert, false));
しかし、プッシュシャープが.NETコアで利用できるかどうかわかりません。
'PersistKeySet'を指定すると、コンストラクタを実行するたびにファイルがディスクに永久に保持されます。また、必要がない限り、 'Exportable'を設定しないでください。 – bartonjs