اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
دو دقیقه
ASP.NET Core از مکانیزم «Data protection» برای تولید کلیدهای رمزنگاری اطلاعات موقتی خود استفاده میکند. این روش در دو حالت هاست برنامهها توسط IIS و یا عدم تنظیمات ذخیره سازی آنها به صورت دائمی، اطلاعات خود را در حافظه نگهداری میکند و با ریاستارت شدن سرور و یا IIS، این کلیدها از دست رفته و مجددا تولید میشوند. به این ترتیب کاربران شاهد این مشکلات خواهند بود:
الف) چون کوکیها و یا توکنهای آنها دیگر قابل رمزگشایی نیستند (به علت باز تولید کلیدهای رمزنگاری و رمزگشایی اطلاعات)، مجبور به لاگین مجدد خواهند شد (تا کوکیهای جدیدی برای آنها تولید شوند). همچنین آنتیفورجری توکنهای آنها نیز مجددا باید تولید شوند.
ب) تمام اطلاعات محافظت شدهی توسط Data protection API قابل رمزگشایی نخواهند بود.
تنظیم Data protection API مخصوص برنامههای هاست شدهی توسط IIS
برای اینکه کلیدهای رمزنگاری اطلاعات برنامههای وب به صورت دائمی ذخیره شوند و با ریاستارت سرور از دست نروند، یکی از سه روش ذیل را میتوان بکار گرفت:
1) اسکریپت پاور شل ذیل را اجرا کنید:
نحوهی اجرای آن نیز به صورت ذیل است و پس از آن، نام Application pool مخصوص برنامه ذکر میشود:
در این حالت کلیدهای رمزنگاری اطلاعات به صورت دائمی به رجیستری ویندوز اضافه میشوند. این کلیدها به صورت خودکار توسط مکانیزم DPAPI ویندوز، رمزنگاری میشوند.
2) به تنظیمات پیشرفتهی Application pool برنامه در IIS مراجعه کرده و خاصیت Load user profile آنرا true کنید.
در این حالت کلیدها به صورت دائمی در پوشهی پروفایل کاربر مخصوص Application pool برنامه، به صورت رمزنگاری شدهی توسط مکانیزم DPAPI ویندوز، ذخیره خواهند شد.
3) یک SSL Certificate معتبر را تهیه کنید و یا اگر از یک self signed certificate استفاده میکنید باید آنرا در Trusted Root store ویندوز قرار دهید. سپس از روش PersistKeysToFileSystem استفاده کنید.
اگر از یک web farm استفاده میکنید، روش سوم ذکر شده، تنها روشی است که از آن میتوانید استفاده کنید. یک پوشهی اشتراکی قابل دسترسی بین سرورها را ایجاد کنید که دربرگیرندهی X509 certificate شما باشد. سپس این پوشه و مجوز موجود در آنرا توسط روش فوق به برنامه معرفی کنید.
الف) چون کوکیها و یا توکنهای آنها دیگر قابل رمزگشایی نیستند (به علت باز تولید کلیدهای رمزنگاری و رمزگشایی اطلاعات)، مجبور به لاگین مجدد خواهند شد (تا کوکیهای جدیدی برای آنها تولید شوند). همچنین آنتیفورجری توکنهای آنها نیز مجددا باید تولید شوند.
ب) تمام اطلاعات محافظت شدهی توسط Data protection API قابل رمزگشایی نخواهند بود.
تنظیم Data protection API مخصوص برنامههای هاست شدهی توسط IIS
برای اینکه کلیدهای رمزنگاری اطلاعات برنامههای وب به صورت دائمی ذخیره شوند و با ریاستارت سرور از دست نروند، یکی از سه روش ذیل را میتوان بکار گرفت:
1) اسکریپت پاور شل ذیل را اجرا کنید:
نحوهی اجرای آن نیز به صورت ذیل است و پس از آن، نام Application pool مخصوص برنامه ذکر میشود:
.\Provision-AutoGenKeys.ps1 DefaultAppPool
2) به تنظیمات پیشرفتهی Application pool برنامه در IIS مراجعه کرده و خاصیت Load user profile آنرا true کنید.
در این حالت کلیدها به صورت دائمی در پوشهی پروفایل کاربر مخصوص Application pool برنامه، به صورت رمزنگاری شدهی توسط مکانیزم DPAPI ویندوز، ذخیره خواهند شد.
3) یک SSL Certificate معتبر را تهیه کنید و یا اگر از یک self signed certificate استفاده میکنید باید آنرا در Trusted Root store ویندوز قرار دهید. سپس از روش PersistKeysToFileSystem استفاده کنید.
public void ConfigureServices(IServiceCollection services) { services.AddDataProtection() .PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\directory\")) .ProtectKeysWithCertificate("thumbprint"); }
اگر از یک web farm استفاده میکنید، روش سوم ذکر شده، تنها روشی است که از آن میتوانید استفاده کنید. یک پوشهی اشتراکی قابل دسترسی بین سرورها را ایجاد کنید که دربرگیرندهی X509 certificate شما باشد. سپس این پوشه و مجوز موجود در آنرا توسط روش فوق به برنامه معرفی کنید.