چگونه TLS را روی SQL Server فعال کنیم؟

چگونه TLS را روی SQL Server فعال کنیم؟

نوشته شده توسط: تیم فنی نیک آموز
تاریخ انتشار: ۲۱ مرداد ۱۴۰۳
آخرین بروزرسانی: ۲۲ مرداد ۱۴۰۳
زمان مطالعه: 10 دقیقه
۵
(۱)

فعال سازی TLS روی SQL Server به عنوان یک اقدام امنیتی، از اهمیت بسیار زیادی برخوردار است. این پروتکل امنیتی به شما امکان می‌دهد که داده‌های SQL Server را رمزگذاری کنید و امنیت دیتابیس را افزایش دهید. در این مقاله، نحوۀ فعال کردن TLS روی سرور SQL Server را آموزش می‌دهیم.

دوره آموزش امنیت در SQL Server 2022 نیک آموز

قبل از شروع

پیش از اینکه به سراغ پیکربندی برویم، بیایید خلاصه‌ای از اطلاعات پیش‌نیاز را مرور کنیم. SQL Server به عنوان یک محصول دیتابیس سازمانی، مدت‌ها بود که از رمزگذاری SSL پشتیبانی می‌کرد.  به دلیل آسیب‌پذیری‌های مختلف در نسخه‌های قبلی این پروتکل، مایکروسافت در نهایت پشتیبانی از SSL را متوقف کرد و از ژانویه ۲۰۱۶، به پشتیبانی از TLS 1.2 پرداخت.

از آن زمان، مایکروسافت استفاده از TLS 1.2 را برای رمزگذاری تمام نسخه‌های SQL Server توصیه کرده است؛ حتی نسخه‌های قدیمی‌تر این دیتابیس مثل ۲۰۰۸، ۲۰۱۲ و ۲۰۱۴. برای فعال‌سازی رمزگذاری:

  • یک گواهی امنیت لایۀ حمل‌ونقل (TLS) را روی SQL Server نصب می‌کنیم؛
  • نمونه SQL Server را برای استفاده از این گواهی پیکربندی می‌کنیم؛
  • رمزگذاری را اعمال می‌کنیم تا ارتباط بین SQL Server و برنامه مشتری همیشه ایمن بماند.

به این نکته توجه داشته باشید که هنگام اجرای رمزگذاری، SQL Server شروع به رد کردن آن دسته از اتصالات مشتری می‌کند که از رمزگذاری پشتیبانی نمی‌کنند. بنابراین مهم است که ابتدا این مراحل را در یک محیط توسعه یا مرحله‌بندی امتحان کنید تا جلوی خراب شدن احتمالی سیستم تولید را بگیرید.

مراحل نصب گواهی TLS روی SQL Server

در این بخش، می‌خواهیم نصب و فعال سازی TLS روی SQL Server را مرحله‌به‌مرحله پیش ببریم. انجام این کار، وقت زیادی نمی‌گیرد و فقط دو مرحله دارد که در ادامه توضیح می‌دهیم.

مرحله اول: گواهی TLS را از یک CA قابل اعتماد خریداری کنید

می‌توانید این گواهی‌نامه را از هر مرجع عمومی قابل اعتماد دریافت کنید. بعد از خرید گواهی، لازم است یک درخواست امضای گواهی (CSR) بفرستید، گواهی‌نامه را صادر و آن را روی SQL Server نصب کنید. این رویه ممکن است بسته به ارائه‌دهنده گواهی متفاوت باشد.

گواهی TLS باید ویژگی‌های زیر را داشته باشید:

  • شناسه OID مورد استفاده باید ۱.۳.۶.۱.۵.۵.۷.۳.۱. باشد. OID یک مقدار عددی است که برای شناسایی هدف یک گواهی استفاده می‌شود. مرجع گواهی‌نامه باید OID را به طور خودکار در فیلد Enhanced Key در حین ایجاد گواهی درج کند. مقدار عددی ذکرشده نشان می‌دهد که گواهی‌نامه می‌تواند برای احراز هویت سرور استفاده شود.

 

مراحل نصب گواهی TLS روی SQL Server

 

جدول زیر تعدادی از پرکاربردترین OIDها را به همراه هدف از استفاده نشان می‌دهد:

 

هدف OID
احراز هویت سرور ۱.۳.۶.۱.۵.۵.۷.۳.۱
احراز هویت مشتری ۱.۳.۶.۱.۵.۵.۷.۳.۲
امضای کد ۱.۳.۶.۱.۵.۵.۷.۳.۳
حفاظت از ایمیل ۱.۳.۶.۱.۵.۵.۷.۳.۴
مُهر زمانی ۱.۳.۶.۱.۵.۵.۷.۳.۸
OSCP امضای ۱.۳.۶.۱.۵.۵.۷.۳.۹

 

  • نام مشترک (CN یا Common Name) باید با نام میزبان یا نام دامنه SQL Server کاملاً مطابقت داشته باشد.
  • اگر نمونه SQL Server را با هر نام دیگری خطاب کند، قسمت نام جایگزین موضوع (SAN یا Subject Alternate Name) هم باید شامل آن نام باشد.

مرحله دوم: گواهی امضاشده را با PowerShell ایجاد کنید

برای نمایش گواهی‌نامه باید از PowerShell استفاده کنید. برای انجام این کار، یک کنسول PowerShell را در هاست SQL Server راه‌اندازی و دستور زیر را اجرا کنید:

 

New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -Subject "srv201.testlab.local" -DnsName "srv201.testlab.local", "sql201.testlab.local" -FriendlyName "SQL Server Certificate"

 

 

مراحل نصب گواهی TLS روی SQL Server

 

مطمئن شوید که نام مناسبی را برای مطابقت با SQL Server خود با پارامتر Subject مشخص کرده‌اید. پارامتر اختیاری DnsName می‌تواند فهرستی از نام‌های جایگزین موضوع (SAN) جداشده با کاما را مشخص کند. این دستور یک گواهی امضاشده تولید و آن را در Local Computer Store ذخیره می‌کند.

مراقب باشید که این گواهی‌نامه‌های امضاشده در معرض حملات MitM یا Man-In-The-Middle هستند. بنابراین اگر در حال راه‌اندازی رمزگذاری روی SQL Server هستید، به شدت توصیه می‌کنیم که یک گواهی معتبر از یک مرجع گواهی‌نامه عمومی قابل اعتماد دریافت کنید.

گواهی را به نمونه SQL Server متصل کنید

هنگامی که گواهی را نصب کردید، باید آن را به نمونه SQL Server متصل کنید. برای انجام این کار، مراحل زیر را دنبال کنید:

  1. ابتدا SQL Server Configuration Manager را باز کنید.
  2. سپس روی SQL Server Network Configuration کلیک کنید، بعد روی Protocols for MSSQLSERVER کلیک راست کنید و مانند تصویر زیر، گزینۀ Properties را از منوی Context انتخاب کنید:

 

باز کردن Properties نمونه SQL Server در SQL Server Configuration Manager

 

  1. زمانی که این کار را انجام دادید، پنجره Protocols برای MSSQLSERVER Properties باز می‌شود. روی گزینه Certificate کلیک کنید و گواهی TLS را که نصب کرده‌اید، از لیست انتخاب کنید.

 

اتصال گواهی TLS با نمونه SQL Server با استفاده از SQL Server Configuration Manager

 

  1. حالا روی گزینه Flags کلیک کنید، در قسمت Force Encryption گزینه Yes را انتخاب کنید و روی OK کلیک کنید. وقتی که از این مرحله بگذرید، SQL Server هم به اتصالات رمزگذاری‌شده و هم بدون رمز‌گذاری دسترسی می‌دهد. با این حال، انجام این کار را توصیه نمی‌کنیم؛ چون هدف کلی کار را زیر سؤال می‌برد.

 

رمزگذاری Force در نمونه SQL Server با استفاده از SQL Server Configuration Manager

 

  1. حالا یک پنجره دیگر به شما نشان داده می‌شود که می‌گوید هرگونه تغییر ایجادشده ذخیره خواهد شد. البته این تغییرات تا زمانی که سرویس متوقف و مجدد راه‌اندازی نشود، اعمال نمی‌شود. برای تأیید روی OK کلیک کنید.

 

مراحل نصب گواهی TLS روی SQL Server

 

هرگونه تغییر ایجادشده ذخیره می‌شود، اما تا زمانی که سرویس متوقف و راه‌اندازی مجدد نشود، اعمال نمی‌شود

  1. در نهایت، روی گره SQL Server Services کلیک کنید، روی SQL Server MSSQLSERVER کلیک راست کنید و گزینۀ Restart را از منوی Context انتخاب کنید.

 

مراحل نصب گواهی TLS روی SQL Server

 

اگر از SQL Server در یک محیط خوشه‌ای یا کلاستر استفاده می‌کنید، باید این مراحل را در تمام گره‌های SQL Server دنبال کنید. همچنین باید مطمئن شوید که فیلد SAN شامل تمام شبکه مجازی نمونه SQL Server است. حالا SQL Server شما آماده پذیرش اتصالات رمزگذاری‌شده است.

گواهی TLS را در برنامه های مشتری فعال کنید

حالا که نمونه SQL Server را برای رمزگذاری Force پیکربندی کردید، این دیتابیس فقط اتصالات رمزگذاری‌شده را می‌پذیرد. با این حال، همچنین باید برنامه‌های مشتری (Client) را برای پشتیبانی از اتصال رمزگذاری‌شده پیکربندی کنید.

برای انجام این کار، رشته اتصال را در فایل web.config برنامه تغییر دهید تا Encrypt=True را در بر بگیرد؛ همان‌طور که در تصویر زیر نشان داده‌ایم:

 

گواهی TLS را در برنامه های مشتری فعال کنید

 

در SQL Server Management Studio یا SSMS، می‌توانید ویژگی‌های اتصال را همان‌طور که در تصویر زیر نشان داده‌ایم، تغییر دهید:

 

گواهی TLS را در برنامه های مشتری فعال کنید

 

خطاهای احتمالی هنگام فعال سازی TLS در SQL Server

در این بخش، می‌خواهیم در مورد تعدادی از خطاهای احتمالی صحبت کنیم که ممکن است هنگام فعال سازی TLS در SQL Server با آن‌ها مواجه شوید. نحوه رفع آن‌ها را هم توضیح می‌دهیم.

شروع نشدن سرویس SQL Server

اگر سرویس دیتابیس SQL Server شما پس از انجام مراحل بالا شروع نشد، به احتمال زیاد تحت یک اکانت سرویس سفارشی (مدیریت‌شده) اجرا می‌شود. در این صورت، سرویس به دلیل دسترسی ناکافی روی کلید خصوصی نمی‌تواند گواهی را بارگیری کند و این پیام خطا را در Event Viewer مشاهده می‌کنید:

 

Unable to load user-specified certificate [Cert Hash(sha1) "03F8433DA93F5602F9F57410C61A30B73F7B1212"]. The server will not accept a connection. You should verify that the certificate is correctly installed.

 

خطاهای احتمالی هنگام فعال سازی TLS در SQL Server

 

برای برطرف کردن این خطا، مراحل زیر را دنبال کنید:

  1. پنجره Run را باز کنید. certlm.msc یا cermgr.msc را تایپ کنید تا Certificate Manager برای سیستم یا کاربر فعلی (بسته به جایی که گواهی TLS را نصب کرده‌اید) باز شود و روی Enter کلیک کنید.
  2. حالا گواهی TLS را پیدا کنید که به نمونه SQL Server متصل است. روی گواهی کلیک راست کنید، همه وظایف را انتخاب کنید و در آخر Manage Private Keys را انتخاب کنید. این مراحل را در تصویر زیر نشان داده‌ایم:

 

Certificate manager برای سیستم Manage Private Keys

 

  1. در پنجره Permissions اکانت سرویس SQL Server را اضافه کنید، اجازه کنترل کامل را بدهید و روی OK کلیک کنید.

 

خطاهای احتمالی هنگام فعال سازی TLS در SQL Server

 

  1. سرویس SQL Server را Restart کنید و مطمئن شوید که بدون هیچ خطایی شروع به کار می‌کند.

گواهی خودامضاشده: خطای ۲۱۴۶۸۹۳۰۱۹

اگر از گواهی خودامضاشده با SQL Server استفاده کرده‌اید، احتمالاً خطای زیر را در SSMS مشاهده می‌کنید:

A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 – The certificate chain was issued by an authority that is not trusted.) (Microsoft SQL Server, Error: -2146893019)

 

خطاهای احتمالی هنگام فعال سازی TLS در SQL Server

 

برای رفع این خطا می‌توانید گزینه Trust Server Certificate را در Connection Properties در SSMS انتخاب کنید. مجدد برای جلوگیری از چنین خطاهایی و به حداقل رساندن خطرات احتمالی حملات MitM یا Man-In-The-Middle توصیه می‌کنیم از یک مرجع گواهی معتبر استفاده کنید.

نام اصلی Target نادرست است: خطای ۲۱۴۶۸۹۳۰۲۲

ممکن است خطای زیر را مشاهده کنید:

A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 – The target principal name is incorrect.) (Microsoft SQL Server, Error: -2146893022)

 

خطاهای احتمالی هنگام فعال سازی TLS در SQL Server

 

این خطا به این دلیل رخ می‌دهد که نام دیتابیس SQL Server که می‌خواهید به آن متصل شوید، با نام رایج (CN) مطابقت ندارد. همچنین در لیست نام‌های جایگزین موضوع (SAN) موجود نیست. برای رفع این خطا، باید گواهی TLS را دوباره تولید کنید و نام اصلی را در زیر DNS Name در SAN قرار دهید.

اگر از دستور PowerShell برای تولید گواهی استفاده کرده‌اید، از پارامتر DnsName برای افزودن همۀ نام‌های جایگزین استفاده کنید. همان‌طور که در تصویر نشان داده‌ایم، فیلد SAN باید تمام نام‌های DNS را فهرست کند.

 

خطاهای احتمالی هنگام فعال سازی TLS در SQL Server

 

چگونه بررسی کنیم که رمزگذاری TLS کار می‌کند؟

حالا ممکن است این سؤال برایتان پیش بیاید که چگونه مطمئن شویم ارتباط بین SQL Server و برنامه کلاینت (به عنوان مثال Server Management Studio) واقعاً رمزگذاری شده است؟ برای یافتن پاسخ این سؤال، می‌توانید کوئری زیر را در SSMS اجرا کنید:

 

SELECT encrypt_option FROM sys.dm_exec_connections WHERE session_id = @@SPID

 

چگونه بررسی کنیم که رمزگذاری TLS کار می‌کند؟

 

سپس یک مقدار Boolean را مشاهده می‌کنید که می‌تواند True یا False باشد. علامت True نشان می‌دهد که اتصال رمزگذاری شده است. اگر ماژول SQL Server PowerShell را نصب کرده‌اید، می‌توانید مانند شکل زیر از دستور Invoke-Sqlcmd نیز استفاده کنید:

 

Invoke-Sqlcmd -ServerInstance "SRV201.testlab.local" -Query "SELECT DISTINCT encrypt_option FROM sys.dm_exec_connections WHERE session_id = @@SPID"

 

چگونه بررسی کنیم که رمزگذاری TLS کار می‌کند؟

 

در صورت تمایل، می‌توانید به عنوان جایگزین از ابزارهایی مثل Wireshark برای تأیید رمزگذاری اتصال استفاده کنید.

جمع‌ بندی: چگونه TLS را روی SQL Server فعال کنیم؟

در این مقاله، شیوه فعال سازی TLS روی SQL Server را مرحله‌به‌مرحله توضیح دادیم. به خاطر داشته باشید که اگر برنامه‌های شما از طریق شبکه‌های غیرقابل اعتماد مثل اینترنت به یک نمونه SQL Server متصل شوند، رمزگذاری ارتباطات بسیار ضروری است.

چه رتبه ای می‌دهید؟

میانگین ۵ / ۵. از مجموع ۱

اولین نفر باش

title sign
معرفی نویسنده
تیم فنی نیک آموز
مقالات
402 مقاله توسط این نویسنده
محصولات
0 دوره توسط این نویسنده
تیم فنی نیک آموز
title sign
دیدگاه کاربران