4

Azureの役割の設定を保存する標準的な方法は<ConfigurationSettings>、.cscfgファイルのタグの下にあるようです。便利そうに見えますが、ファイルは暗号化されていません。これは、Azureポータルにプレーンテキストとしてアップロードされ、プレーンテキストとして保存され、いつでも編集できるXMLです。

私のアプリケーションでは、プレーンテキストとして保存しないように設定する必要があります。たとえば、SQLAzureデータベースのパスワードなどです。そのパスワードを含むプレーンテキストのXMLファイルは必要ありません。このような役割設定を保存するにはどうすればよいですか?

4

2 に答える 2

8

これをオンプレミスで行う一般的な方法は、単一のマシンで DPAPI を使用することです。もちろん、これは Web ファームでは問題があります。これを回避するには、各マシンで 1 つのキーを共有して暗号化します。これを行う最も簡単な方法は、証明書ベースの暗号化を使用することです。

Michael が参照した SQL Azure の投稿に反対するものはありませんが、PKCS12 構成プロバイダーを使用するように指示するのは、これまでで最も長いシリーズでした。そのプロバイダーを使用する唯一の理由は、appSettings から自動的に読み取ることができる ASP.NET の組み込みツールと組み合わせて機能することです。変更が必要な ServiceConfiguration には役立ちません。

設定 (通常は ServiceConfig) を安全に保護することだけが目的であり、それを行うためのユーティリティ クラスを作成してもかまわない場合は、Windows Azure にアップロードされた任意の証明書 (秘密キーを使用) でこれら 2 つの関数を使用できます。これはまさに、リモート アクセスのパスワードがサービス構成で暗号化される方法です。

暗号化:

var passwordBytes = UTF8Encoding.UTF8.GetBytes("p@ssw0rd");
var contentInfo = new ContentInfo(passwordBytes);
var thumb = "F49E41878B6D63A8DD6B3650030C1A06DEBB5E77";

var env = new EnvelopedCms(contentInfo);

X509Store store = null;

try
{
    store = new X509Store(StoreName.My, StoreLocation.CurrentUser);

    store.Open(OpenFlags.ReadOnly);
    var cert = store.Certificates.Cast<X509Certificate2>().Where (xc => xc.Thumbprint == thumb).Single();

    env.Encrypt(new CmsRecipient(cert));

    Convert.ToBase64String(env.Encode()).Dump();
}
finally
{
    if (store != null)
        store.Close();
}

復号化:

var thumb = "F49E41878B6D63A8DD6B3650030C1A06DEBB5E77";

var cipherText = "MIIBrwYJKoZIhvcNAQcDoIIBoDCCAZwCAQAxggFgMIIBXAIBADBEMDAxLjAsBgNVBAMTJWR1bm5yeTd0YWIucmVkbW9uZC5jb3JwLm1pY3Jvc29mdC5jb20CECNRAOTmySOQTA2HuEpAcD4wDQYJKoZIhvcNAQEBBQAEggEAkIxJNnCb1nkZe3Gk2zQO8JQn2hOYM9+O9yx1eprTn7dCwjIlYulUMIYwFCMDI7TiYCXG7cET2IP/ooNBPYwxzAvEL5dUVIMK9EDE0jyRP3sGPGiSvG0MW8+xZuQx4wMGNSwm2lVW1ReVRGEpTeTcUFSBCPvXsULpbqCqXtSTgjsHngxgOKjmrWBIdrxCDxtfzvNPgSQ2AVqLTRKgFTN9RHUwJJ2zhGW+F+dBfxai3nlr7HN7JKiIdlNA0UjCd/kSIZqNfPlvd2V58RBMpkW+PEp3vpBa/8D/fhU3Qg/XBNXhroES7aVDB5E16QYO6KgPdXMCpLcQ4e9t1UhokEwUizAzBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECEImLeoQJeVkgBCQ94ZxmHnVkBWrID+S4PEd";

X509Store store = null;

try
{
    store = new X509Store(StoreName.My, StoreLocation.CurrentUser);

    store.Open(OpenFlags.ReadOnly);
    var cert = store.Certificates.Cast<X509Certificate2>().Where (xc => xc.Thumbprint == thumb).Single();

    var bytes = Convert.FromBase64String(cipherText);
    var env = new EnvelopedCms();
    env.Decode(bytes);
    env.Decrypt();
    Encoding.UTF8.GetString(env.ContentInfo.Content).Dump();
}
finally
{
    if (store != null)
        store.Close();
}
于 2011-07-08T22:12:25.037 に答える
2

SQL Azure ブログをチェックしてください。彼らはこれについて正確にブログを書いています。

また、 http://blogs.msdn.com/b/sqlazure/archive/tags/security/の以前の投稿

于 2011-07-08T07:56:26.547 に答える