IPSEC.SECRETS(5) strongSwan IPSEC.SECRETS(5)

ipsec.secrets - اطلاعات و کلیدهای محرمانه برای احراز هویت IKE/IPsec

فایل ipsec.secrets جدولی از اطلاعات و کلیدهای محرمانه را نگه‌داری می‌کند. این اطلاعات محرمانه توسط دیمن‌های تبادل کلید اینترنتی (IKE) در strongSwan شامل pluto (برای IKEv1) و charon (برای IKEv2) جهت احراز هویت سایر میزبان‌ها استفاده می‌شوند.

محافظت از این کلیدهای محرمانه امری حیاتی است. مالکیت این فایل باید متعلق به کاربر ارشد (ریشه) باشد و مجوزهای دسترسی آن باید به‌گونه‌ای تنظیم شوند که هرگونه دسترسی برای دیگران مسدود گردد.

این فایل از توالی مدخل‌ها (ورودی‌ها) و دستورالعمل‌های include تشکیل شده است. در ادامه یک نمونه آورده شده است.

# /etc/ipsec.secrets - strongSwan IPsec secrets file
192.168.0.1 %any : PSK "v+NkxY9LLZvwj4qCC2o/gGrWDF2d21jL"
: RSA moonKey.pem
alice@strongswan.org : EAP "x3.dEhgN"
carol : XAUTH "4iChxLT3"
dave  : XAUTH "ryftzG4A"
# get secrets from other files
include ipsec.*.secrets

هر مدخل در فایل فهرستی از گزینش‌گرهای اختیاری شناسه (ID selectors) است که در ادامه آن یک کلید محرمانه قرار دارد. این دو بخش با یک علامت دونقطه (:) که با فاصله‌های خالی احاطه شده است از هم جدا می‌شوند. اگر هیچ گزینش‌گر شناسه‌ای مشخص نشده باشد، خط باید با یک دونقطه آغاز شود.

یک گزینش‌گر می‌تواند یک نشانی IP، یک نام دامنه کاملاً مشخص (FQDN)، ساختار user@FQDN، %any یا %any6 باشد (انواع دیگری نیز ممکن است در آینده اضافه شوند).

تطبیق شناسه‌ها با گزینش‌گرها کاملاً سرراست است: آن‌ها باید برابر باشند. در مورد یک اتصال «مشتری سیار» (Road Warrior)، اگر تطابق برابری برای شناسه همتا (Peer's ID) یافت نشود و آن شناسه در قالب یک نشانی IP باشد، گزینش‌گر %any در صورت استفاده از IPv4 و گزینش‌گر %any6 در صورت استفاده از IPv6 با نشانی IP همتا مطابقت خواهد داشت. در حال حاضر، نماد منسوخ‌شده 0.0.0.0 می‌تواند به جای %any استفاده شود.

در IKEv1 در صورت احراز هویت با استفاده از کلید محرمانه از پیش به‌اشتراک‌گذاشته‌شده، یک پیچیدگی مضاعف رخ می‌دهد: پاسخ‌دهنده باید پیش از آنکه بار داده شناسه همتا (Peer's ID payload) رمزگشایی شود، کلید محرمانه را جستجو کند، بنابراین شناسه استفاده‌شده همان نشانی IP خواهد بود.

برای احراز هویت یک اتصال میان دو میزبان، مدخلی استفاده می‌شود که دقیق‌ترین تطابق را با شناسه میزبان و شناسه همتا داشته باشد. مدخلی بدون هیچ گزینش‌گر با هر میزبان و همتایی مطابقت خواهد داشت. به‌طور مشخص‌تر، مدخلی با یک گزینش‌گر در صورتی با یک میزبان و همتا مطابقت می‌کند که گزینش‌گر با شناسه میزبان همخوانی داشته باشد (همتا در نظر گرفته نمی‌شود). هنوز مشخص‌تر، مدخلی با چندین گزینش‌گر در صورتی با یک میزبان و همتا مطابقت خواهد کرد که شناسه میزبان و شناسه همتا هر کدام با یکی از گزینش‌گرها تطابق داشته باشند. اگر کلید برای یک روش احراز هویت نامتقارن باشد (مانند یک سامانه کلید عمومی نظیر RSA)، مدخلی با چندین گزینش‌گر با میزبان و همتا مطابقت می‌کند حتی اگر تنها شناسه میزبان با یک گزینش‌گر مطابقت داشته باشد (فرض بر این است که همه گزینش‌گرها هویت‌های میزبان هستند). تا زمانی که دو مدخل در مورد کلید محرمانه یا کلید خصوصی با یکدیگر توافق داشته باشند، قرار گرفتن هر دوی آن‌ها به عنوان بهترین تطابق قابل قبول است.

احراز هویت با کلید محرمانه از پیش به‌اشتراک‌گذاشته‌شده مستلزم آن است که هر دو سیستم کلید محرمانه یکسانی را بیابند (کلید محرمانه در واقع توسط پروتکل IKE مخابره نمی‌شود). اگر هم میزبان و هم همتا در فهرست گزینش‌گرها ظاهر شوند، همان مدخل برای هر دو سیستم مناسب خواهد بود و می‌توان از رونوشت عین به عین میان سیستم‌ها استفاده کرد. این امر طبیعتاً به گروه‌های بزرگ‌تری که همان کلید محرمانه را به اشتراک می‌گذارند نیز تعمیم می‌یابد. بنابراین، مدخل‌های دارای چند گزینش‌گر بهترین انتخاب برای احراز هویت PSK هستند.

احراز هویت از طریق سامانه‌های کلید عمومی مانند RSA مستلزم آن است که هر میزبان کلید خصوصی ویژه خود را داشته باشد. یک میزبان می‌تواند به‌طور معقول از کلیدهای خصوصی متفاوتی برای رابط‌های مختلف و همتاهای مختلف استفاده کند، اما به اشتراک گذاشتن مدخل‌ها میان سیستم‌ها عادی نخواهد بود. بنابراین، شکل‌های بدون گزینش‌گر و تک‌گزینش‌گری مدخل‌ها اغلب برای احراز هویت کلید عمومی منطقی هستند.

بخش کلید در یک مدخل باید با یک نشانه (token) آغاز شود که نوع کلید را مشخص می‌کند. در حال حاضر انواع زیر از کلیدهای محرمانه پشتیبانی می‌شوند:

یک کلید از پیش به‌اشتراک‌گذاشته‌شده (pre-shared key) را تعریف می‌کند
یک کلید خصوصی RSA را تعریف می‌کند
یک کلید خصوصی ECDSA را تعریف می‌کند
یک نگه‌دارنده PKCS#12 را تعریف می‌کند
اعتبارنامه‌های EAP را تعریف می‌کند
اعتبارنامه‌های NTLM را تعریف می‌کند
اعتبارنامه‌های XAUTH را تعریف می‌کند
کد پین (PIN) کارت هوشمند را تعریف می‌کند

جزئیات مربوط به هر نوع کلید محرمانه در ادامه آمده است.

فاصله‌های خالی انتهای خط نادیده گرفته می‌شوند. در ابتدای خط یا پس از فاصله خالی، کاراکتر # و متن پس از آن تا انتهای خط به عنوان توضیح (comment) در نظر گرفته می‌شود.

یک دستورالعمل include سبب می‌شود پیش از ادامه پردازش فایل جاری، محتویات فایل نام‌برده‌شده پردازش شود. نام فایل مشمول قابلیت تطبیق الگو («globbing») مانند sh(1) است، بنابراین هر فایلی با نام منطبق پردازش می‌شود. دستورهای include می‌توانند تا عمق متعارفی (در حال حاضر ۱۰ سطح) به‌صورت تو در تو باشند. اگر نام فایل با یک / آغاز نشود، پوشه حاوی فایل جاری به ابتدای نام اضافه می‌شود. دستورالعمل include خطی است که با واژه include آغاز شده و پس از آن فاصله خالی و سپس نام فایل (که نباید شامل فاصله خالی باشد) می‌آید.

[ <selectors> ] : PSK <secret>
یک کلید محرمانه از پیش به‌اشتراک‌گذاشته‌شده (secret) به ساده‌ترین شکل به عنوان دنباله‌ای از کاراکترها نمایش داده می‌شود که در میان کاراکترهای نقل‌قول دوتایی (") قرار گرفته است. این دنباله نمی‌تواند شامل خط جدید یا کاراکترهای نقل‌قول دوتایی باشد.
به‌عنوان روش جایگزین، کلیدهای محرمانه از پیش به‌اشتراک‌گذاشته‌شده را می‌توان به عنوان مقادیر باینری کدگذاری‌شده با هگزادسیمال یا Base64 نمایش داد. دنباله کاراکتری که با 0x آغاز شود به عنوان دنباله‌ای از ارقام هگزادسیمال تفسیر می‌شود. به همین ترتیب، دنباله کاراکتری که با 0s آغاز شود به عنوان داده باینری کدگذاری‌شده با Base64 تفسیر می‌گردد.
: RSA <private key file> [ <passphrase> | %prompt ]
: ECDSA <private key file> [ <passphrase> | %prompt ]
برای فایل کلید خصوصی، هم مسیرهای مطلق و هم مسیرهای نسبی نسبت به /etc/ipsec.d/private پذیرفته می‌شوند. اگر فایل کلید خصوصی رمزگذاری شده باشد، عبارت عبور (passphrase) باید تعریف شود. به‌جای عبارت عبور، می‌توان از %prompt استفاده کرد که در این صورت دیمن هر زمان که برای رمزگشایی کلید لازم باشد، رمز عبور را از کاربر درخواست می‌کند.
: P12 <PKCS#12 file> [ <passphrase> | %prompt ]
برای فایل PKCS#12، هم مسیرهای مطلق و هم مسیرهای نسبی نسبت به /etc/ipsec.d/private پذیرفته می‌شوند. اگر نگه‌دارنده رمزگذاری شده باشد، عبارت عبور (passphrase) باید تعریف شود. به‌جای عبارت عبور، می‌توان از %prompt استفاده کرد که سبب می‌شود دیمن هرگاه برای رمزگشایی نگه‌دارنده لازم باشد، رمز عبور را از کاربر بپرسد. کلیدهای خصوصی، گواهی‌های کلاینت و CA از نگه‌دارنده استخراج می‌شوند. برای استفاده از چنین گواهی کلاینتی در یک اتصال، مقدار leftid را روی یکی از موضوع‌های (subjects) گواهی تنظیم کنید.
<user id> : EAP <secret>
قالب secret همانند کلیدهای محرمانه PSK است.
کلیدهای محرمانه EAP تنها ویژه IKEv2 هستند.
<user id> : NTLM <secret>
قالب secret همانند کلیدهای محرمانه PSK است، اما کلید محرمانه به‌جای متن آشکار، به عنوان هش NTLM که برابر با MD4(UTF-16LE(secret)) است ذخیره می‌شود.
کلیدهای محرمانه NTLM تنها با افزونه eap-mschapv2 قابل استفاده هستند.
[ <servername> ] <username> : XAUTH <password>
قالب password همانند کلیدهای محرمانه PSK است. کلیدهای محرمانه XAUTH تنها ویژه IKEv1 هستند.
: PIN %smartcard[<slot nr>[@<module>]]:<keyid> <pin code> | %prompt
گزینش‌گر کارت هوشمند همیشه نیازمند یک keyid است تا کلید صحیح را به‌طور یکتا انتخاب کند. شماره شیار (slot number) شیار روی توکن را مشخص می‌کند، و نام ماژول به نام ماژول تعریف‌شده در strongswan.conf(5) اشاره دارد. به‌جای تعیین ایستا کد پین، می‌توان %prompt را مشخص کرد که باعث می‌شود دیمن کد پین را از کاربر درخواست کند.

/etc/ipsec.secrets

ipsec.conf(5), strongswan.conf(5), ipsec(8)

در ابتدا توسط D. Hugh Redelmeier برای پروژه FreeS/WAN نوشته شد. توسط Tobias Brunner و Andreas Steffen برای پروژه strongSwan http://www.strongswan.org به‌روزرسانی و گسترش یافت.

اگر شناسه برابر با 0.0.0.0 باشد، با %any تطابق می‌یابد؛ و اگر برابر با 0::0 باشد، با %any6 تطابق خواهد داشت.

2011-12-14 6.1.0