
توقيع الكود والشفافية للحاويات والملفات الثنائية
توقيع حاويات OCI (وغيرها من المخرجات) باستخدام Sigstore!
يهدف Cosign إلى جعل التوقيعات بنية تحتية غير مرئية.
يدعم Cosign:
تم تطوير Cosign كجزء من مشروع sigstore.
نستخدم أيضًا قناة slack!
انقر هنا للحصول على رابط الدعوة.
لعمليات التثبيت عبر Homebrew و Arch و Nix و GitHub Action و Kubernetes، راجع وثائق التثبيت.
لثنائيات Linux و macOS و Windows، راجع أصول إصدار GitHub.
🚨 إذا كنت تقوم بتنزيل إصدارات cosign من حاوية GCS الخاصة بنا - يرجى الاطلاع على مزيد من المعلومات حول إشعار الإهمال بتاريخ 31 يوليو 2023 🚨
إذا كان لديك Go 1.22+، يمكنك إعداد بيئة تطوير:
$ git clone https://github.com/sigstore/cosign
$ cd cosign
$ go install ./cmd/cosign
$ $(go env GOPATH)/bin/cosign
إذا كنت مهتمًا بالمساهمة في cosign، فيرجى قراءة وثائق المساهمة.
سيركز تطوير Cosign المستقبلي على الإصدار الرئيسي التالي الذي سيكون مبنيًا على sigstore-go. سيركز المشرفون على تطوير الميزات داخل sigstore-go. نقدّر المساهمات في sigstore-go، خاصةً فيما يتعلق بمفاتيح bring-your-own والتوقيع. يرجى الاطلاع على متتبع المشكلات للعثور على مشكلات مناسبة للمبتدئين.
Cosign 2.x هو إصدار مستقر وسيستمر في تلقي تحديثات الميزات الدورية وإصلاحات الأخطاء. طلبات السحب (PRs) الصغيرة في النطاق والحجم هي الأكثر احتمالًا للمراجعة السريعة.
لن يتم قبول طلبات السحب التي تعدّل واجهة برمجة التطبيقات (API) بشكل كبير أو تكسرها. قد يتم قبول طلبات السحب الكبيرة في الحجم ولكنها لا تُدخل تغييرات كاسرة، لكنها ستُعتبر ذات أولوية أقل من طلبات السحب في sigstore-go.
إليك كيفية تثبيت واستخدام cosign داخل Dockerfile من خلال صورة ghcr.io/sigstore/cosign/cosign:
FROM ghcr.io/sigstore/cosign/cosign:v2.4.1 as cosign-bin
# Source: https://github.com/chainguard-images/images/tree/main/images/static
FROM cgr.dev/chainguard/static:latest
COPY --from=cosign-bin /ko-app/cosign /usr/local/bin/cosign
ENTRYPOINT [ "cosign" ]
يوضح هذا كيفية:
لاحظ أنه يجب عليك دائمًا توقيع الصور بناءً على digest الخاص بها (@sha256:...)
بدلاً من tag (:latest) لأنه بخلاف ذلك قد توقّع شيئًا لم
تكن تنوي توقيعه!
cosign sign $IMAGE
Generating ephemeral keys...
Retrieving signed certificate...
Note that there may be personally identifiable information associated with this signed artifact.
This may include the email address associated with the account with which you authenticate.
This information will be used for signing this artifact and will be stored in public transparency logs and cannot be removed later.
By typing 'y', you attest that you grant (or have permission to grant) and agree to have this information stored permanently in transparency logs.
Are you sure you would like to continue? [y/N] y
Your browser will now be opened to:
https://oauth2.sigstore.dev/auth/auth?access_type=online&client_id=sigstore&code_challenge=OrXitVKUZm2lEWHVt1oQWR4HZvn0rSlKhLcltglYxCY&code_challenge_method=S256&nonce=2KvOWeTFxYfxyzHtssvlIXmY6Jk&redirect_uri=http%3A%2F%2Flocalhost%3A57102%2Fauth%2Fcallback&response_type=code&scope=openid+email&state=2KvOWfbQJ1caqScgjwibzK2qJmb
Successfully verified SCT...
tlog entry created with index: 12086900
Pushing signature to: $IMAGE
سيطلب منك Cosign المصادقة عبر OIDC، حيث ستسجّل الدخول باستخدام عنوان بريدك الإلكتروني. خلف الكواليس، سيطلب cosign شهادة توقيع رمز من سلطة شهادات Fulcio. سيتطابق موضوع الشهادة مع عنوان البريد الإلكتروني الذي سجّلت الدخول به. سيقوم Cosign بعد ذلك بتخزين التوقيع والشهادة في سجل الشفافية Rekor، ورفع التوقيع إلى سجل OCI إلى جانب الصورة التي توقّعها.
للتحقق من الصورة، ستحتاج إلى تمرير موضوع الشهادة المتوقع ومُصدِر الشهادة عبر العلامتين --certificate-identity و --certificate-oidc-issuer:
cosign verify $IMAGE --certificate-identity=$IDENTITY --certificate-oidc-issuer=$OIDC_ISSUER
يمكنك أيضًا تمرير تعبير نمطي (regex) لعلامات هوية الشهادة والمُصدر، --certificate-identity-regexp و --certificate-oidc-issuer-regexp.
يُرجع هذا الأمر القيمة 0 إذا تم العثور على توقيع واحد على الأقل بتنسيق cosign للصورة
يطابق المفتاح العام.
راجع الاستخدام التفصيلي أدناه للحصول على معلومات وتحذيرات حول تنسيقات التوقيع الأخرى.
تُطبع أي حِمولات صالحة إلى stdout، بصيغة json. لاحظ أن هذه الحِمولات الموقّعة تتضمن بصمة صورة الحاوية، وهي الطريقة التي يمكننا بها التأكد من أن هذه التوقيعات "المنفصلة" تغطي الصورة الصحيحة.
$ cosign verify --key cosign.pub $IMAGE_URI:1h
The following checks were performed on these signatures:
- The cosign claims were validated
- The signatures were verified against the specified public key
{"Critical":{"Identity":{"docker-reference":""},"Image":{"Docker-manifest-digest":"sha256:87ef60f558bad79beea6425a3b28989f01dd417164150ab3baab98dcbf04def8"},"Type":"cosign container image signature"},"Optional":null}
ملاحظة: هذا القسم قديم.
ملاحظة: تتطلب معظم سير عمل التحقق طلب مفاتيح الخدمة بشكل دوري من مستودع TUF. للتحقق المعزول من التوقيعات باستخدام نسخة المصلحة العامة، ستحتاج إلى استرداد ملف الجذر الموثوق من مستودع TUF الإنتاجي. سيتغير محتوى هذا الملف دون إشعار. بعدم استخدام TUF، ستحتاج إلى بناء آليتك الخاصة للحفاظ على نسختك المعزولة من هذا الملف محدثة.
يمكن لـ Cosign إجراء تحقق غير متصل بالكامل من خلال التحقق من حزمة والتي عادةً ما تُوزَّع كتعليق توضيحي على بيان الصورة.
طالما أن هذا التعليق التوضيحي موجود، يمكن إجراء التحقق غير المتصل.
يُضمَّن تعليق الحزمة هذا دائمًا بشكل افتراضي للتوقيع بدون مفتاح، لذا ستتضمن وظيفة cosign sign الافتراضية جميع المواد اللازمة للتحقق غير المتصل.
للتحقق من صورة في بيئة معزولة عن الشبكة، يجب أن تكون الصورة والتوقيعات متاحة محليًا على نظام الملفات.
يمكن حفظ صورة محليًا باستخدام cosign save (ملاحظة، يجب تنفيذ هذه الخطوة مع اتصال بالشبكة):