روش رفع مشکل باگ Let's encrypt
در روز شنبه 10 اسفند 1398، خبری از سایت اصلی Let’s Encrypt مبنی بر وجود مشکل فنی در گواهینامههای SSL رایگان منتشر شد. این باگ مربوط به ایجاد رکورد CAA مربوط به گواهینامههای SSL رایگان Let’s Encrypt میباشد. اما CAA چیست؟ چگونه این مشکل برای گواهینامههای اس اس ال رایگان ایجاد شده است؟ رفع مشکل باگ گواهینامه امنیتی Let's encrypt چگونه است؟
اطلاعیه سایت Let's encrypt:
https://community.letsencrypt.org/t/...ing-bug/114591
On 2020-02-29 UTC, Let’s Encrypt found a bug in our CAA code. Our CA software, Boulder, checks for CAA records at the same time it validates a subscriber’s control of a domain name. Most subscribers issue a certificate immediately after domain control validation, but we consider a validation good for 30 days. That means in some cases we need to check CAA records a second time, just before issuance. Specifically, we have to check CAA within 8 hours prior to issuance (per BRs §3.2.2.8), so any domain name that was validated more than 8 hours ago requires rechecking.
The bug: when a certificate request contained N domain names that needed CAA rechecking, Boulder would pick one domain name and check it N times. What this means in practice is that if a subscriber validated a domain name at time X, and the CAA records for that domain at time X allowed Let’s Encrypt issuance, that subscriber would be able to issue a certificate containing that domain name until X+30 days, even if someone later installed CAA records on that domain name that prohibit issuance by Let’s Encrypt.
We confirmed the bug at 2020-02-29 03:08 UTC, and halted issuance at 03:10. We deployed a fix at 05:22 UTC and then re-enabled issuance.
Our preliminary investigation suggests the bug was introduced on 2019-07-25. We will conduct a more detailed investigation and provide a postmortem when it is complete.
رکورد CAA چیست؟
رکورد CAA (Certification Authority Authorization) یک رکورد مخصوص دامنه است. این رکورد از طرف دامنه اعلام میکند که امکان ارائه گواهینامه SSL برای آن فراهم است. همچنین این رکود اعلام میکند که کدام شرکت حق ارائه گواهینامه برای آن را دارد. سپس شرکتهای ارائه دهنده SSL پس از مشاهده این رکورد، از طرق کد CA اقدام به تایید ارسال گواهینامه SSL میکنند. یعنی از طریق CA مالکیت دامنه را تایید کرده و گواهینامه را صادر میکنند.
اگر این رکورد وجود نداشته باشد، آنگاه هر گواهینامهای از طریق CA میتواند برای آن دامنه صادر شود.
روند تولید کد CA در Let’s Encrypt
شرکت Let’s Encrypt نرم افزار تولید کد CA به نام Boulder دارد. این نرم افزار وظیفه چک کردن رکورد CAA و ایجاد گواهینامه SSL را بر عهده دارد. اکثر کاربران پس از آنکه رکورد CAA آنها چک شد، بلافاصله گواهینامه SSL برایشان ارسال میشود. شرکت Let’s Encrypt اعتبار درستی این قضیه CAA را 30 روزه در نظر میگیرد. این بدان معنی است که دیگر در این 30 روز امکان بررسی مجدد آن وجود ندارد.
حال مشکل اصلی از کجا بود؟
مشکل اصلی از سمت ایجاد رکوردهای CAA بود. یعنی وقتی در خواست یک گواهینامه شامل N دامنه باشد و نیازمند تایید مجدد CAA باشد، برنامه Boulder یک دامنه را انتخاب کرده و آن را N بار چک میکند. چیزی که در عمل اتفاق میافتد این است که اگر یک دامنه توسط درخواست دهنده در زمان X تایید گردد و رکوردهای CAA برای آن دامنه امکان صدور گواهینامه را بدهد، آن درخواست کننده میتواند گواهینامه دیگری شامل آن دامنه تا زمان X + 30 روز صادر کند. حتی اگر کس دیگری بعد از آن رکورد های CAA دیگری برای آن دامنه که توسط Lets encrypt برای صدور گواهینامه مجاز نباشد، نصب کرده باشد.
پس ایراد آنجایی پیدا میشود که صدور آن گواهینامه مجاز شناخته نشود. در این صورت از لحاظ امنیتی برای سایت مشکل ساز خواهد بود. یعنی هر شخصی میتواند با یک درخواست CA ، چندین گواهینامه مختلف که ممکن است غیرمجاز باشد برای دامنه خود صادر کند.
البته شرکت Let’s Encrypt گواهینامههای قبلی خود را لغو و گواهینامههای جدیدی را صادر کرد.
رفع مشکل در cPanel:
https://github.com/1817666/cPanel-Le...ecking-Bug-Fix
رفع مشکل در Directadmin:
https://gist.github.com/alisalehiman...e3d43b3a27e4c9