Apple Certificate یک سند دیجیتال است که توسط Apple Developer Portal برای امضای کد برنامههای iOS، iPadOS، macOS، tvOS و watchOS صادر میشود. به گفته Apple Developer Support, 2026، گواهیها بخشی از زیرساخت کلید عمومی (PKI) هستند و برای تأیید هویت توسعهدهنده ضروری میباشند. در این مقاله انواع گواهیها، فرآیند ایجاد و مدیریت آنها را بررسی خواهیم کرد.
نکات اصلی
Apple Certificate یک گواهی رمزنگاری با فرمت X.509 است که توسط مرکز صدور گواهی Apple (Apple Certificate Authority) صادر میشود. این گواهی تأیید میکند که مالک آن یک عضو ثبتنام شده Apple Developer Program است و حق امضای برنامههای اکوسیستم Apple را دارد. گواهی شامل کلید عمومی، فراداده مالک و امضای دیجیتال Apple CA است — هر کسی میتواند با استفاده از گواهی ریشه Apple تعبیهشده در سیستم عامل، اصالت گواهی را تأیید کند.
معماری PKI Apple شامل سه سطح است: گواهی ریشه Apple (Apple Root CA)، گواهی میانی (Apple Worldwide Developer Relations CA) و گواهی توسعهدهنده. Apple Worldwide Developer Relations CA همه گواهیهای توسعهدهندگان را امضا میکند — اگر این گواهی میانی در زنجیره اعتماد وجود نداشته باشد، امضای کد نامعتبر تلقی میشود. گواهیهای ریشه Apple بهطور خودکار از طریق مکانیزم Apple Trust Store تعبیهشده در iOS و macOS بهروز میشوند.
هر گواهی دارای مدت اعتبار است — از یک سال تا سه سال، بسته به نوع. Apple Developer Program بهطور خودکار 30 روز قبل از انقضای گواهی از طریق ایمیل و اعلانهای push به توسعهدهنده اطلاع میدهد. پس از انقضا، گواهی قدیمی برای امضای بیلدهای جدید قابل استفاده نیست — باید گواهی جدیدی صادر کرد، با این حال برنامههای امضا شده با گواهی منقضی شده همچنان روی دستگاههای کاربران کار میکنند.
زنجیره اعتماد تضمین میکند که گواهی توسعهدهنده واقعاً توسط Apple صادر شده است. iOS بررسی میکند: گواهی ریشه Apple Root CA (تعبیهشده در سیستمعامل)، گواهی میانی Apple Worldwide Developer Relations CA، گواهی توسعهدهنده. اگر هر یک از عناصر زنجیره وجود نداشته باشد یا نامعتبر باشد، iOS اجرای برنامه را با خطای code signing مسدود میکند. macOS ابزار security را برای بررسی زنجیره اعتماد هر گواهی در Keychain فراهم میکند.
فرآیند امضای کد با استفاده از Apple Certificate بر پایه رمزنگاری نامتقارن است. کلید خصوصی (private key) روی رایانه توسعهدهنده در Keychain ذخیره میشود و کلید عمومی (public key) در گواهی گنجانده شده و به Apple Developer Portal ارسال میشود. وقتی Xcode برنامهای را امضا میکند، یک چکسام (هش) از فایل باینری ایجاد کرده و آن را با کلید خصوصی رمزگذاری میکند — این امضای دیجیتال است. دستگاه امضا را با کلید عمومی از گواهی رمزگشایی کرده و با هش محاسبهشده مقایسه میکند.
Apple از الگوریتم ECDSA (Elliptic Curve Digital Signature Algorithm) با منحنی P-256 برای همه گواهیهای صادر شده پس از 2021 استفاده میکند. پیش از این از RSA-2048 استفاده میشد. انتقال به ECDSA سرعت بررسی امضا را روی دستگاهها افزایش داد و اندازه امضا را کاهش داد — برای برنامههای موبایل این بسیار مهم است، زیرا بررسی امضا در هر بار اجرا انجام میشود. به گفته Apple Security Engineering (2025)، ECDSA P-256 سطح امنیتی معادل RSA-2048 را با هزینه محاسباتی بهمراتب کمتر فراهم میکند.
برای فرآیندهای CI/CD، گواهی همراه با کلید خصوصی باید به PKCS12 (.p12) صادر شده و در ذخیرهگاه امن نگهداری شود. GitHub Actions، Bitrise، Jenkins و سایر سیستمهای CI از وارد کردن گواهیها از طریق متغیرهای محیطی یا اسرار پشتیبانی میکنند. پس از وارد کردن در عامل CI، گواهی بهطور موقت به Keychain اضافه شده، برای امضا استفاده شده و حذف میشود. Fastlane Match این فرآیند را با همگامسازی گواهیها بین توسعهدهندگان از طریق مخزن git رمزگذاریشده خودکار میکند.
Development گواهی امکان امضای برنامهها برای اجرا روی دستگاههای فیزیکی توسعهدهنده را فراهم میکند. برای دریافت آن یک حساب Apple ID رایگان کافی است — Xcode میتواند گواهی Development را بهطور خودکار تولید کند. Distribution گواهی فقط برای حسابهای پولی Apple Developer Program (۹۹ دلار در سال) صادر میشود و برای ارسال برنامه به App Store، توزیع Ad Hoc یا Enterprise الزامی است. یک حساب میتواند چندین گواهی Distribution داشته باشد — مثلاً جداگانه برای هر برنامه یا برای تیمهای مختلف.
Apple Developer Portal چندین نوع گواهی ارائه میدهد که هر کدام برای یک وظیفه خاص طراحی شدهاند. iOS App Development — گواهی پایه برای امضای برنامهها در مرحله توسعه. Apple Distribution — گواهی اصلی برای انتشار در App Store. Mac Development و Mac Distribution — مشابه برای برنامههای macOS. برای هر نوع گواهی یک درخواست جداگانه (CSR) در Apple Developer Portal وجود دارد.
یک دسته جداگانه گواهیهای اعلانهای push هستند. Apple Push Notification service (APNs) یا به یک گواهی SSL جداگانه نیاز دارد یا به استفاده از توکنهای احراز هویت (APNs Auth Key). گواهیهای SSL APNs بهطور جداگانه برای محیطهای Development (Sandbox) و Production صادر میشوند و به یک App ID خاص متصل میشوند. APNs Auth Key — رویکرد مدرنتر: یک کلید (.p8) به همه برنامههای حساب خدمات میدهد که مدیریت را سادهتر میکند.
| نوع گواهی | کاربرد | مدت اعتبار |
|---|---|---|
| iOS App Development | امضا برای آزمایش روی دستگاهها | ۱ سال |
| Apple Distribution | انتشار در App Store و Ad Hoc | ۱ سال |
| Mac Development | امضای برنامههای macOS برای توسعه | ۱ سال |
| Mac Distribution | انتشار در Mac App Store | ۱ سال |
| APNs SSL (Sandbox) | اعلانهای push در محیط تست | ۱-۳ سال |
| APNs SSL (Production) | اعلانهای push در محیط تولید | ۱-۳ سال |
ایجاد Apple Certificate با تولید درخواست امضای گواهی (Certificate Signing Request, CSR) از طریق Keychain Access در macOS آغاز میشود. Keychain Access یک جفت کلید ایجاد میکند: کلید خصوصی در Keychain باقی میماند و CSR به Apple Developer Portal ارسال میشود. پس از تأیید هویت، Apple CSR را امضا کرده و گواهی آماده (.cer) را صادر میکند که باید با دوبار کلیک دانلود و نصب شود.
برای مدیریت چندین پروژه و تیم، Apple امکان ایجاد گواهی برای Team IDهای مختلف را فراهم میکند. یک توسعهدهنده میتواند عضو چندین تیم باشد (از طریق Apple Developer Program — App Store Connect) و برای هر تیم گواهیهای جداگانه صادر میشود. Xcode با توجه به تیم انتخابشده در تنظیمات Signing & Capabilities بهطور خودکار گواهیها را جابجا میکند.
باطلسازی (revoke) گواهی یک عملیات حیاتی است: همه برنامههای امضا شده با این گواهی روی دستگاههای جدید نصب نمیشوند (برنامههای نصبشده قبلی همچنان کار میکنند). Apple Developer Portal امکان باطلسازی هر گواهی را در بخش Certificates فراهم میکند. دلایل باطلسازی: به خطر افتادن کلید خصوصی، خروج توسعهدهنده از تیم، نقض شرایط Apple Developer Program. پس از باطلسازی باید گواهی جدیدی صادر کرده و همه بیلدهای فعال را دوباره امضا کرد.
Keychain — ذخیرهگاه سیستمی macOS برای گواهیها، کلیدهای خصوصی و رمزهای عبور. همه گواهیهای Apple و کلیدهای خصوصی متناظر در Keychain ورود (login.keychain) کاربر ذخیره میشوند. Xcode هنگام امضای کد به Keychain مراجعه میکند و بهطور خودکار گواهی مناسب را بر اساس نوع بیلد انتخاب میکند. برای تشخیص مشکلات امضا، استفاده از ابزار داخلی Keychain Access (پوشه /Applications/Utilities) راحت است.
صدور گواهی برای CI/CD از طریق Keychain Access انجام میشود: گواهی و کلید خصوصی متناظر را انتخاب کنید (آنها باید در یک خط باز شده باشند)، کلیک راست کرده و Export را انتخاب کنید. فرمت — PKCS12 (.p12). هنگام صدور، Keychain برای محافظت از فایل درخواست رمز عبور میکند — این رمز در هنگام وارد کردن در سرور CI مورد نیاز خواهد بود. بدون کلید خصوصی، گواهی صادرشده برای امضا بیفایده است — فقط میتواند برای تأیید کد قبلاً امضا شده استفاده شود.
مثال دستور برای وارد کردن گواهی در Keychain عامل CI با استفاده از ابزار security:
# ایجاد Keychain موقت
security create-keychain -p "temp" build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p "temp" build.keychain
# وارد کردن گواهی از .p12
security import certificate.p12 -k build.keychain \
-P "${P12_PASSWORD}" -T /usr/bin/codesign
# پیکربندی سیاست امضا
security set-key-partition-list -S apple: -s \
-k "temp" build.keychain
Security create-keychain یک Keychain موقت ایجاد میکند که از Keychain کاربر جدا است. این برای CI مهم است تا Keychain سیستم عامل آلوده نشود. پرچم -T /usr/bin/codesign به ابزار codesign اجازه دسترسی به کلیدها را بدون درخواست رمز عبور میدهد — در غیر این صورت امضای خودکار در pipeline با یک دیالوگ قطع میشود. دستور set-key-partition-list برای سازگاری با الزامات macOS برای امضای کد در حالت خودکار ضروری است.
رایجترین خطا — «No signing certificate found» هنگام بیلد در Xcode. زمانی رخ میدهد که در Keychain گواهی با کلید خصوصی متناظر با نوع بیلد انتخابشده وجود نداشته باشد. راهحل: Keychain Access را برای وجود گواهی بررسی کنید، آن را از Apple Developer Portal دانلود کرده و نصب کنید. اگر کلید خصوصی گم شده است (رایانه قدیمی، نصب مجدد سیستم)، باید گواهی قدیمی را باطل کرده و گواهی جدید صادر کنید.
خطای «Valid signing certificate not found» در CI/CD زمانی رخ میدهد که گواهیهای میانی Apple (Apple Worldwide Developer Relations CA) روی عامل نصب نباشند. Apple گواهیهای میانی را هنگام دانلود گواهی توسعهدهنده در زنجیره قرار میدهد، اما در صدور دستی .p12 ممکن است وجود نداشته باشند. راهحل — گواهیهای میانی را از سایت Apple Certificate Authority دانلود کرده و در Keychain عامل CI نصب کنید.
مشکل گواهی منقضیشده با خطای «This certificate has an invalid issuer» هنگام امضا ظاهر میشود. Apple Developer Portal وضعیت هر گواهی و تاریخ انقضا را نشان میدهد. اگر برنامه قبلاً در App Store با گواهی منقضیشده منتشر شده باشد، همچنان کار میکند — App Store از گواهی Apple خود برای توزیع استفاده میکند. با این حال برای ارسال بیلد جدید به یک گواهی Distribution معتبر نیاز است. Fastlane شامل دستور cert برای ایجاد و بهروزرسانی خودکار گواهیها است.
سوالات متداول
خیر، برای iOS و macOS انواع مختلفی از گواهیها صادر میشود — iOS App Development و Mac Development. Apple Distribution گواهی نیز بر اساس پلتفرم تقسیم میشود. هنگام ایجاد گواهی در Apple Developer Portal باید پلتفرم هدف را مشخص کنید — گواهی جهانی برای همه پلتفرمها وجود ندارد.
باید گواهی قدیمی را در Apple Developer Portal از طریق Certificates, Identifiers & Profiles باطل کنید. سپس یک CSR جدید از طریق Keychain Access ایجاد کرده و گواهی جدید صادر کنید. همه برنامههای امضا شده با گواهی قدیمی نیاز به امضای مجدد و بارگذاری مجدد در App Store دارند، در صورت نیاز به انتشار بهروزرسانی.
برای یک حساب Apple Developer Program حداکثر دو گواهی Distribution و تعداد نامحدودی گواهی Development به طور همزمان مجاز است. Enterprise حسابها محدودیتهای جداگانه دارند. اگر به حد مجاز گواهیهای Distribution رسیدهاید، باید یکی از گواهیهای موجود را قبل از ایجاد گواهی جدید باطل کنید.
از ابزار security استفاده کنید: security find-identity -v -p basic همه گواهیهای موجود در Keychain را با تاریخ انقضا فهرست میکند. برای یک گواهی خاص، هش SHA-1 آن را مشخص کنید: security find-certificate -c «Developer» -p | openssl x509 -noout -enddate.
بله، گواهیها به یک حساب Apple Developer خاص (Team ID) متصل هستند. هنگام تغییر حساب، گواهیهای قدیمی برای Team ID جدید نامعتبر میشوند. Xcode هنگام تغییر حساب در Accounts Preferences بهطور خودکار ایجاد گواهیهای جدید برای تیم جدید را درخواست میکند.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید