openssl ca: تاریخ انقضای نامعتبر در index.txt و نحوه برطرف کردن آن
CA از صدور خودداری میکند چون یک خط در index.txt تجزیه نمیشود. وضعیت CA را کپی کنید، ورودی را رمزگشایی کنید، سپس آن را با گواهی امضاشده تطبیق دهید.
یک اجرای صدور با entry 22: invalid expiry date متوقف میشود، و درخواستی که پیش روی شماست کاملاً درست است. شکایت از تجزیهکننده پایگاهداده CA میآید، نه از CSR و نه از کارخواه VPN که در نهایت گواهی را ارائه خواهد کرد. همین تمایز همه چیز پس از آن را تعیین میکند: یک رکورد بدشکل است، پس تعمیر به وضعیت CA تعلق دارد، نه به درخواست یا پیکربندی همتا. با ورودی شمارهدار مانند یک خط در index.txt رفتار کنید، و مشکل به یک پرسش دادهای محدود با پاسخی قابل بررسی کوچک میشود.
خطا را شکایتی درباره پایگاهداده بخوانید
هر openssl ca فراخوانی پیش از امضای هر چیزی، پایگاهداده متنی خود را میپیماید. هر خط یک حرف وضعیت، یک مهر زمانی انقضا، یک مهر زمانی ابطال اختیاری، یک شماره سری به هگز، یک نام فایل و یک subject را نگه میدارد. وقتی یک فیلد تجزیه نمیشود، فرمان شماره خط را گزارش میکند و متوقف میشود، بهجای حدس زدن درباره بقیه رکورد.
این توقف محافظتی است، نه ایرادگیرانه. رکوردی که ابزار نمیتواند بخواند، آن را ناتوان میگذارد از تصمیم درباره اینکه آیا subject درخواستی از قبل وجود دارد، آیا شماره سری صادر شده است، یا CRL بعدی چه باید داشته باشد. عبور از یک خط خراب دقیقاً همان ناسازگاری خاموشی را میسازد که ماهها بعد، معمولاً هنگام ابطالی که هیچکس نمیتواند توضیح دهد، سر باز میکند. پیام را شکایتی درباره داده بخوانید، و بررسی داخل پوشه CA میماند.
پیش از دست زدن به هر چیزی وضعیت CA را کپی کنید
از کل پوشه CA عکس لحظهای بگیرید، نه فقط از فایل پایگاهداده. نمایه، فایل ویژگیهایش، فایلهای شماره سری و شماره CRL، کلید خصوصی و گواهیهای صادرشده همه در عملیات بعدی شرکت دارند، و تعمیری که یکی را بازمیگرداند و بقیه را جا میگذارد، رخداد دومی میسازد. هر جا روتین پشتیبانگیری خود CA وجود دارد از آن استفاده کنید و صدور زمانبندیشده را در طول کار متوقف کنید.
ساخت OpenSSL و فایل پیکربندیای را که فرمان ناموفق واقعاً بار کرده است ثبت کنید. نصبها غالباً بیش از یک پوشه CA نگه میدارند، و خطا تنها نسبت به پایگاهدادهای معنا دارد که پیکربندی انتخابشده نام میبرد.
ورودی را پیدا کنید و فیلد تاریخ آن را رمزگشایی کنید
شماره خط گزارششده از نخستین رکورد شمرده میشود، پس sed -n '22p' index.txt روی همان ورودی مشکلدار میافتد، بهشرط آنکه تأیید کنید بالای آن خط خالی یا توضیحی نیست. آن خط را با جداکنندههای دیدنی چاپ کنید، زیرا تبها و فاصلههای انتهایی رایجاند و در پنجره ویرایشگر معمولی دیده نمیشوند.
فیلد انقضا یک مهر زمانی است که پهنایش به سال بستگی دارد. مقادیر تا 2049 در UTCTime به شکل YYMMDDHHMMSSZ نوشته میشوند، در حالی که مقادیر بعدی به GeneralizedTime با سال چهاررقمی میروند. رکوردی که دو شکل را درهم میآمیزد، یا سال دورقمی را جایی میآورد که تجزیهکننده اکنون چهار رقم انتظار دارد، دقیقاً در همین نقطه شکست میخورد. همچنین فیلد بریدهای که یک نوشتن قطعشده برجا گذاشته است.
رکورد را با گواهیای که به آن اشاره دارد مقایسه کنید، نه با فایل CA دیگر. گواهی امضاشده مرجع آن است که اعتبار چه باید بگوید، و از قبل بهعنوان شیئی قابل تجزیه وجود دارد.
رکورد را بر پایه گواهی امضاشده تعمیر کنید
تاریخهای واقعی را با این فرمان بخوانید: openssl x509 -in issued.pem -noout -dates -serial -subject. مقدار notAfter را به پهنای مهری که ساخت شما برای آن سال مینویسد تبدیل کنید، و پیش از تغییر حتی یک نویسه تأیید کنید که شماره سری با ورودیای که میخواهید ویرایش کنید میخواند.
فقط فیلد خراب را ویرایش کنید، حرف وضعیت و شماره سری را نگه دارید، و بقیه خط را رها کنید. اگر رکورد را با هیچ گواهی امضاشدهای نمیتوان تطبیق داد، آن را ورودی سرگردان بدانید و از مسیر ابطال خود CA بازنشستهاش کنید، نه اینکه خط را دستی پاک کنید.
با بریدن تاریخ برای جور شدن با حدسی درباره سال تعمیر نکنید. برش دو نویسهای میان ساختها قابل حمل نیست و بیصدا اعتباری را تغییر میدهد که پایگاهداده به بررسیهای بعدی subject تکراری و CRL گزارش میکند. هنگامی که مقدار اصلی بازیابیشدنی نیست، با شماره سری جدید دوباره صادر کنید و بنویسید چرا قدیمی رها شد. رد حسابرسی بخشی از تعمیر است، نه کاغذبازی پیرامون آن.
پیش از رفتن، صدور و تولید CRL را بررسی کنید
یک صدور را با همان پیکربندی اجرا کنید و تأیید کنید که بدون شکایت شماره خط کامل میشود. سپس با این فرمان یک CRL بسازید: openssl ca -gencrl -config openssl.cnf و بررسی کنید که تجزیه میشود، زیرا رکورد آسیبدیده غالباً همانجا سر باز میکند، نه هنگام امضا.
گواهی تازه را با این فرمان بررسی کنید: openssl x509 -noout -dates -serial و آن را با خطی که CA همین حالا نوشته مقایسه کنید. تأیید کنید که حرف وضعیت و تاریخ انقضا با گواهی میخواند، و تأیید کنید که openssl verify -CAfile ca.pem issued.pem بدون خطا بازمیگردد. سپس صدور زمانبندیشده را بازگردانید و نخستین اجرا را بپایید، زیرا خط بدشکل دوم بیدرنگ خود را اعلام میکند.