
कंटेनर और बाइनरी के लिए कोड हस्ताक्षर और पारदर्शिता
<p align="center">
<img style="max-width: 100%;width: 300px;" src="https://raw.githubusercontent.com/sigstore/community/main/artwork/cosign/horizontal/color/sigstore_cosign-horizontal-color.svg" alt="Cosign logo"/>
</p>
# cosign
[Sigstore](https://sigstore.dev/) का उपयोग करके OCI कंटेनरों (और अन्य आर्टिफैक्ट्स) पर हस्ताक्षर करना!
[](https://goreportcard.com/report/github.com/sigstore/cosign)
[](https://github.com/sigstore/cosign/actions/workflows/e2e-tests.yml)
[](https://bestpractices.coreinfrastructure.org/projects/5715)
[](https://securityscorecards.dev/viewer/?uri=github.com/sigstore/cosign)
Cosign का लक्ष्य हस्ताक्षरों को **अदृश्य अधोसंरचना** बनाना है।
Cosign समर्थन करता है:
* Sigstore सार्वजनिक हित Fulcio प्रमाणपत्र प्राधिकरण और Rekor पारदर्शिता लॉग के साथ "कीलेस साइनिंग" (डिफ़ॉल्ट)
* हार्डवेयर और KMS साइनिंग
* cosign द्वारा उत्पन्न एन्क्रिप्टेड निजी/सार्वजनिक कीपेयर के साथ साइनिंग
* OCI रजिस्ट्री में कंटेनर साइनिंग, सत्यापन और भंडारण।
* अपना स्वयं का PKI लाएं
## जानकारी
`Cosign` को [`sigstore`](https://sigstore.dev) प्रोजेक्ट के हिस्से के रूप में विकसित किया गया है।
हम एक [slack चैनल](https://sigstore.slack.com) का भी उपयोग करते हैं!
आमंत्रण लिंक के लिए [यहाँ](https://join.slack.com/t/sigstore/shared_invite/zt-47srvpyn6-j8Ek5hGBwKN32IjLw8BvYA) क्लिक करें।
## इंस्टॉलेशन
Homebrew, Arch, Nix, GitHub Action, और Kubernetes इंस्टॉल के लिए [इंस्टॉलेशन दस्तावेज़](https://docs.sigstore.dev/cosign/system_config/installation/) देखें।
Linux, macOS और Windows बाइनरी के लिए, [GitHub रिलीज़ एसेट्स](https://github.com/sigstore/cosign/releases/latest) देखें।
:rotating_light: यदि आप हमारे GCS बकेट से cosign के रिलीज़ डाउनलोड कर रहे हैं - तो कृपया 31 जुलाई, 2023 की [डेप्रिकेशन सूचना](https://blog.sigstore.dev/cosign-releases-bucket-deprecation/) पर अधिक जानकारी देखें :rotating_light:
## डेवलपर इंस्टॉलेशन
यदि आपके पास Go 1.22+ है, तो आप एक डेवलपमेंट वातावरण सेटअप कर सकते हैं:
```shell
$ git clone https://github.com/sigstore/cosign
$ cd cosign
$ go install ./cmd/cosign
$ $(go env GOPATH)/bin/cosign
```
## योगदान
यदि आप `cosign` में योगदान देने में रुचि रखते हैं, तो कृपया [योगदान दस्तावेज़](https://github.com/sigstore/cosign/blob/main/CONTRIBUTING.md) पढ़ें।
भविष्य में Cosign का विकास अगले प्रमुख रिलीज़ पर केंद्रित होगा जो
[sigstore-go](https://github.com/sigstore/sigstore-go) पर आधारित होगा। मेंटेनर sigstore-go के भीतर
फीचर डेवलपमेंट पर ध्यान केंद्रित करेंगे। sigstore-go में योगदान, विशेष रूप से bring-your-own keys और साइनिंग के आसपास, की सराहना की जाती है।
कृपया अच्छे पहले मुद्दों के लिए [issue tracker](https://github.com/sigstore/sigstore-go/issues) देखें।
Cosign 2.x एक स्थिर रिलीज़ है और इसे समय-समय पर फीचर अपडेट और बग फिक्स मिलते रहेंगे। छोटे दायरे और आकार के PRs
सबसे अधिक संभावना है कि जल्दी समीक्षा किए जाएंगे।
जो PRs API को महत्वपूर्ण रूप से संशोधित या तोड़ते हैं, उन्हें स्वीकार नहीं किया जाएगा। जो PRs आकार में महत्वपूर्ण हैं लेकिन
ब्रेकिंग बदलाव नहीं लाते, उन्हें स्वीकार किया जा सकता है, लेकिन sigstore-go में PRs की तुलना में कम प्राथमिकता माना जाएगा।
## Dockerfile
यहाँ बताया गया है कि ghcr.io/sigstore/cosign/cosign इमेज के माध्यम से Dockerfile के अंदर cosign को कैसे इंस्टॉल और उपयोग करें:
```shell
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" ]
```
## त्वरित शुरुआत
यह दिखाता है कि कैसे:
* डिफ़ॉल्ट पहचान-आधारित "कीलेस साइनिंग" विधि से कंटेनर इमेज पर हस्ताक्षर करें (अधिक जानकारी के लिए [दस्तावेज़ देखें](https://docs.sigstore.dev/cosign/signing/overview/))
* कंटेनर इमेज को सत्यापित करें
* [Sigstore Cosign Quickstart](https://docs.sigstore.dev/quickstart/quickstart-cosign/) में व्यापक कीलेस ब्लॉब साइनिंग/सत्यापन प्रवाह का अन्वेषण करें
### एक कंटेनर पर हस्ताक्षर करें और हस्ताक्षर को रजिस्ट्री में संग्रहीत करें
ध्यान दें कि आपको हमेशा टैग (`:latest`) के बजाय इमेज के डाइजेस्ट (`@sha256:...`) के आधार पर हस्ताक्षर करना चाहिए, क्योंकि अन्यथा आप किसी ऐसी चीज़ पर हस्ताक्षर कर सकते हैं जिसका आपने इरादा नहीं किया था!
```shell
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 प्रारूप में प्रिंट किए जाते हैं।
ध्यान दें कि इन हस्ताक्षरित पेलोड में कंटेनर छवि का डाइजेस्ट शामिल होता है, जिससे हमें यह सुनिश्चित होता है
कि ये "डिटैच्ड" हस्ताक्षर सही छवि को कवर करते हैं।
```shell
$ 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 रिपॉज़िटरी से [trusted root](https://github.com/sigstore/root-signing/blob/main/targets/trusted_root.json) फ़ाइल प्राप्त करनी होगी। इस फ़ाइल की सामग्री बिना किसी सूचना के बदल जाएगी। TUF का उपयोग न करके, आपको इस फ़ाइल की अपनी एयरगैप्ड प्रति को अद्यतित रखने के लिए अपना स्वयं का तंत्र बनाना होगा।
Cosign एक [bundle](https://github.com/sigstore/cosign/blob/main/specs/SIGNATURE_SPEC.md#properties) को सत्यापित करके पूरी तरह से ऑफ़लाइन सत्यापन कर सकता है, जिसे आमतौर पर इमेज मैनिफ़ेस्ट पर एक एनोटेशन के रूप में वितरित किया जाता है।
जब तक यह एनोटेशन मौजूद है, तब तक ऑफ़लाइन सत्यापन किया जा सकता है।
यह बंडल एनोटेशन कीलेस साइनिंग के लिए डिफ़ॉल्ट रूप से हमेशा शामिल होता है, इसलिए डिफ़ॉल्ट `cosign sign` कार्यक्षमता में ऑफ़लाइन सत्यापन के लिए आवश्यक सभी सामग्री शामिल होगी।
एयर-गैप्ड वातावरण में किसी इमेज को सत्यापित करने के लिए, इमेज और हस्ताक्षर फ़ाइलसिस्टम पर स्थानीय रूप से उपलब्ध होने चाहिए।
एक इमेज को `cosign save` का उपयोग करके स्थानीय रूप से सहेजा जा सकता है (ध्यान दें, यह चरण नेटवर्क कनेक्शन के साथ किया जाना चाहिए):
```
cosign initialize # This will pull in the latest TUF root
cosign save $IMAGE_NAME --dir ./path/to/dir
```
अब, एक एयर-गैप्ड वातावरण में, इस स्थानीय इमेज को सत्यापित किया जा सकता है:
```shell
cosign verify \
--certificate-identity $CERT_IDENTITY \
--certificate-oidc-issuer $CERT_OIDC_ISSUER \
--offline=true \
--new-bundle-format=false \ # for artifacts signed without the new protobuf bundle format
--trusted-root ~/.sigstore/root/tuf-repo-cdn.sigstore.dev/targets/trusted_root.json \ # default location of trusted root
--local-image ./path/to/dir
```
आपको इस इमेज को सही ढंग से सत्यापित करने के लिए `$CERT_IDENTITY` और `$CERT_OIDC_ISSUER` के लिए अपेक्षित मान पास करने होंगे।
यदि आपने किसी keypair से हस्ताक्षर किए हैं, तो वही कमांड काम करेगा, बशर्ते सार्वजनिक कुंजी सामग्री स्थानीय रूप से मौजूद हो:
```
cosign verify --key cosign.pub --offline --local-image ./path/to/dir
```
### पहचान-आधारित ब्लॉब हस्ताक्षर और सत्यापन
कीलेस ब्लॉब हस्ताक्षर (`cosign sign-blob` बिना `--key`) का उपयोग करें और अपेक्षित हस्ताक्षरकर्ता पहचान के विरुद्ध सत्यापित करें:
```shell
$ cosign sign-blob artifact --bundle artifact.sigstore.json --yes
$ cosign verify-blob artifact \
--bundle artifact.sigstore.json \
--certificate-identity "https://github.com/ORG/REPO/.github/workflows/release.yml@refs/heads/main" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com"
```
### समस्या निवारण
यदि आपको Cosign के साथ समस्याएँ आती हैं, तो पहले सुनिश्चित करें कि आप एक हालिया रिलीज़ का उपयोग कर रहे हैं: Cosign प्रोजेक्ट सबसे हालिया रिलीज़ के साथ-साथ v2 श्रृंखला की अंतिम रिलीज़ का भी सक्रिय रूप से समर्थन करता है।
#### सामान्य समस्याएँ और उपाय
1. सत्यापन `failed to verify timestamps: threshold not met for verified log entry integrated timestamps: 0 < 1` के साथ विफल हो जाता है: आप ऐसे हस्ताक्षर का सत्यापन कर रहे होंगे जिसके लिए RFC3161 टाइमस्टैम्प समर्थन आवश्यक है
* सबसे हालिया Cosign में अपग्रेड करें या
* Cosign 2.6.x के साथ, `--use-signed-timestamps` का उपयोग करें
1. सत्यापन `no signatures found` के साथ विफल हो जाता है: आप ऐसे इमेज हस्ताक्षर का सत्यापन कर रहे होंगे जिसके लिए Rekor v2 ट्रांसपेरेंसी लॉग का समर्थन आवश्यक है
* सबसे हालिया Cosign में अपग्रेड करें
1. HTTP त्रुटियों के साथ साइनिंग विफल हो जाती है: Cosign के साथ साइनिंग कई Sigstore सेवाओं पर निर्भर करती है। यदि इनमें से कोई भी सेवा विफल हो जाती है तो विफलता पर पुनः प्रयास करना एक उपयोगी वर्कअराउंड हो सकता है -- विशिष्ट विफलताओं के लिए इश्यू फाइल करना भी सराहनीय है
#### मेरी समस्या कुछ और है
कृपया एक [issue](https://github.com/sigstore/cosign/issues/new/choose) खोलें या [slack channel](#info) में पूछें।
## अन्य आर्टिफैक्ट्स के साथ कार्य करना
OCI रजिस्ट्रियाँ केवल कंटेनर इमेज से अधिक संग्रहीत करने के लिए उपयोगी हैं!
`Cosign` में OCI प्रोटोकॉल का उपयोग करके सामान्य आर्टिफैक्ट्स, जिनमें बाइनरी, स्क्रिप्ट और कॉन्फ़िगरेशन फ़ाइलें शामिल हैं, प्रकाशित करने के लिए कुछ उपयोगिताएँ भी शामिल हैं।
यह अनुभाग दिखाता है कि Sigstore के बाकी हिस्सों के साथ अच्छी तरह से एकीकृत होने वाले एक उपयोग में आसान, बैकवर्ड-संगत आर्टिफैक्ट वितरण सिस्टम के लिए इनका लाभ कैसे उठाया जाए।
अधिक जानकारी के लिए [the documentation](https://docs.sigstore.dev/cosign/signing/other_types/) देखें।
### Blobs
आप `cosign upload blob` के साथ एक आर्टिफैक्ट प्रकाशित कर सकते हैं:
```shell
$ echo "my first artifact" > artifact
$ BLOB_SUM=$(shasum -a 256 artifact | cut -d' ' -f 1) && echo "$BLOB_SUM"
c69d72c98b55258f9026f984e4656f0e9fd3ef024ea3fac1d7e5c7e6249f1626
$ BLOB_NAME=my-artifact-$(uuidgen | head -c 8 | tr 'A-Z' 'a-z')
$ BLOB_URI=ttl.sh/$BLOB_NAME:1h
$ BLOB_URI_DIGEST=$(cosign upload blob -f artifact $BLOB_URI) && echo "$BLOB_URI_DIGEST"
Uploading file from [artifact] to [ttl.sh/my-artifact-f42c22e0:5m] with media type [text/plain]
File [artifact] is available directly at [ttl.sh/v2/my-artifact-f42c22e0/blobs/sha256:c69d72c98b55258f9026f984e4656f0e9fd3ef024ea3fac1d7e5c7e6249f1626]
Uploaded image to:
ttl.sh/my-artifact-f42c22e0@sha256:790d47850411e902aabebc3a684eeb78fcae853d4dd6e1cc554d70db7f05f99f
```
आपके उपयोगकर्ता इसे "direct" url से curl या wget जैसे मानक टूल्स का उपयोग करके डाउनलोड कर सकते हैं:
```shell
$ curl -L ttl.sh/v2/$BLOB_NAME/blobs/sha256:$BLOB_SUM > artifact-fetched
```
डाइजेस्ट सीधे URL में ही शामिल होता है, इसलिए वे उसे भी जाँच सकते हैं:
```shell
$ cat artifact-fetched | shasum -a 256
c69d72c98b55258f9026f984e4656f0e9fd3ef024ea3fac1d7e5c7e6249f1626 -
```
आप इसे सामान्य `cosign sign` कमांड और फ़्लैग्स के साथ साइन कर सकते हैं:
```shell
$ cosign sign --key cosign.key $BLOB_URI_DIGEST
Enter password for private key:
Pushing signature to: ttl.sh/my-artifact-f42c22e0
```
हमेशा की तरह, अपनी द्वारा हस्ताक्षरित किसी भी इमेज को उसके डाइजेस्ट के संदर्भ में देखना सुनिश्चित करें ताकि आप गलत चीज़ पर हस्ताक्षर न करें!
#### Tekton Bundles
[Tekton](https://tekton.dev) बंडलों को एक OCI रजिस्ट्री के भीतर अपलोड और प्रबंधित किया जा सकता है।
विनिर्देश [यहाँ](https://tekton.dev/docs/pipelines/tekton-bundle-contracts/) है।
इसका मतलब है कि उन्हें `cosign` के साथ हस्ताक्षरित और सत्यापित भी किया जा सकता है।
Tekton Bundles को वर्तमान में [tkn cli](https://github.com/tektoncd/cli) के साथ अपलोड किया जा सकता है, लेकिन हम भविष्य में इस समर्थन को
`cosign` में जोड़ सकते हैं।
```shell
$ tkn bundle push us.gcr.io/dlorenc-vmtest2/pipeline:latest -f task-output-image.yaml
Creating Tekton Bundle:
- Added TaskRun: to image
Pushed Tekton Bundle to us.gcr.io/dlorenc-vmtest2/pipeline@sha256:124e1fdee94fe5c5f902bc94da2d6e2fea243934c74e76c2368acdc8d3ac7155
$ cosign sign --key cosign.key us.gcr.io/dlorenc-vmtest2/pipeline@sha256:124e1fdee94fe5c5f902bc94da2d6e2fea243934c74e76c2368acdc8d3ac7155
Enter password for private key:
tlog entry created with index: 5086
Pushing signature to: us.gcr.io/dlorenc-vmtest2/demo:sha256-124e1fdee94fe5c5f902bc94da2d6e2fea243934c74e76c2368acdc8d3ac7155.sig
```
#### WASM
Web Assembly Modules को इस [specification](https://github.com/solo-io/wasm/tree/master/spec) का उपयोग करके OCI registry में भी संग्रहीत किया जा सकता है।
Cosign इन्हें `cosign wasm upload` कमांड का उपयोग करके अपलोड कर सकता है:
```shell
$ cosign upload wasm -f hello.wasm us.gcr.io/dlorenc-vmtest2/wasm
$ cosign sign --key cosign.key us.gcr.io/dlorenc-vmtest2/wasm@sha256:9e7a511fb3130ee4641baf1adc0400bed674d4afc3f1b81bb581c3c8f613f812
Enter password for private key:
tlog entry created with index: 5198
Pushing signature to: us.gcr.io/dlorenc-vmtest2/wasm:sha256-9e7a511fb3130ee4641baf1adc0400bed674d4afc3f1b81bb581c3c8f613f812.sig
```
#### eBPF
[eBPF](https://ebpf.io) मॉड्यूल को इस [विनिर्देश](https://github.com/solo-io/bumblebee/tree/main/spec) का उपयोग करके OCI रजिस्ट्री में भी संग्रहीत किया जा सकता है।
नीचे दी गई छवि `bee` टूल का उपयोग करके बनाई गई थी। अधिक जानकारी [यहाँ](https://github.com/solo-io/bumblebee/) पाई जा सकती है।
Cosign तब इन छवियों पर हस्ताक्षर कर सकता है जैसे वह किसी अन्य OCI छवि पर कर सकता है।
```shell
$ bee build ./examples/tcpconnect/tcpconnect.c localhost:5000/tcpconnect:test
$ bee push localhost:5000/tcpconnect:test
$ cosign sign --key cosign.key localhost:5000/tcpconnect@sha256:7a91c50d922925f152fec96ed1d84b7bc6b2079c169d68826f6cf307f22d40e6
Enter password for private key:
Pushing signature to: localhost:5000/tcpconnect
$ cosign verify --key cosign.pub localhost:5000/tcpconnect:test
Verification for localhost:5000/tcpconnect:test --
The following checks were performed on each of these signatures:
- The cosign claims were validated
- The signatures were verified against the specified public key
[{"critical":{"identity":{"docker-reference":"localhost:5000/tcpconnect"},"image":{"docker-manifest-digest":"sha256:7a91c50d922925f152fec96ed1d84b7bc6b2079c169d68826f6cf307f22d40e6"},"type":"cosign container image signature"},"optional":null}]
```
#### In-Toto प्रमाणपत्र
Cosign में [in-toto](https://in-toto.io) प्रमाणपत्रों के लिए अंतर्निहित समर्थन भी है।
इनके लिए विशिष्टता [यहाँ](https://github.com/in-toto/attestation) परिभाषित की गई है।
आप निम्नलिखित कमांडों का उपयोग करके एक स्थानीय predicate फ़ाइल से एक बना और हस्ताक्षरित कर सकते हैं:
```shell
$ cosign attest --predicate <file> --key cosign.key $IMAGE_URI_DIGEST
```
सभी मानक key प्रबंधन प्रणालियाँ समर्थित हैं।
Payloads को DSSE signing spec का उपयोग करके हस्ताक्षरित किया जाता है, जिसे [यहाँ](https://github.com/secure-systems-lab/dsse) परिभाषित किया गया है।
सत्यापित करने के लिए:
```shell
$ cosign verify-attestation --key cosign.pub $IMAGE_URI
```
## विस्तृत उपयोग
अधिक जानकारी के लिए [उपयोग दस्तावेज़](https://docs.sigstore.dev/cosign/signing/overview/) देखें।
## हार्डवेयर-आधारित टोकन
हार्डवेयर के साथ `cosign` का उपयोग करने की जानकारी के लिए [हार्डवेयर टोकन दस्तावेज़](https://docs.sigstore.dev/cosign/key_management/hardware-based-tokens/) देखें।
## रजिस्ट्री समर्थन
`cosign` रजिस्ट्री इंटरैक्शन के लिए [go-containerregistry](https://github.com/google/go-containerregistry) का उपयोग करता है, जिसमें आम तौर पर उत्कृष्ट संगतता है, लेकिन कुछ रजिस्ट्रियों में विशिष्टताएँ हो सकती हैं।
आज, `cosign` का परीक्षण किया गया है और यह निम्नलिखित रजिस्ट्रियों के साथ काम करता है:
* AWS Elastic Container Registry
* GCP's Artifact Registry and Container Registry
* Docker Hub
* Azure Container Registry
* JFrog Artifactory Container Registry
* The CNCF distribution/distribution Registry
* GitLab Container Registry
* GitHub Container Registry
* The CNCF Harbor Registry
* Digital Ocean Container Registry
* Sonatype Nexus Container Registry
* Alibaba Cloud Container Registry
* Red Hat Quay Container Registry 3.6+ / Red Hat quay.io
* Elastic Container Registry
* IBM Cloud Container Registry
* Cloudsmith Container Registry
* The CNCF zot Registry
* OVHcloud Managed Private Registry
हमारा लक्ष्य व्यापक रजिस्ट्री समर्थन है। उन रजिस्ट्रियों में छवियों को `sign` करने के लिए जो अभी तक [OCI मीडिया प्रकारों](https://github.com/sigstore/cosign/blob/main/specs/SIGNATURE_SPEC.md) का पूरी तरह से समर्थन नहीं करती हैं, पुराने समकक्षों पर वापस जाने के लिए `COSIGN_DOCKER_MEDIA_TYPES` का उपयोग करना आवश्यक हो सकता है। उदाहरण के लिए:
```shell
COSIGN_DOCKER_MEDIA_TYPES=1 cosign sign --key cosign.key legacy-registry.example.com/my/image@$DIGEST
```
कृपया परीक्षण करने में सहायता करें और यदि आपको समस्याएँ दिखें तो बग रिपोर्ट करें!
निर्देश [tracking issue](https://github.com/sigstore/cosign/issues/40) में पाए जा सकते हैं।
## चेतावनियाँ
### जानबूझकर अनुपस्थित विशेषताएँ
`cosign` केवल ECDSA-P256 कुंजियाँ उत्पन्न करता है और SHA256 हैश का उपयोग करता है, दोनों अस्थायी keyless signing और managed key signing के लिए।
कुंजियाँ PEM-encoded PKCS8 प्रारूप में संग्रहीत की जाती हैं।
हालाँकि, आप किसी भी एल्गोरिद्म से, किसी भी प्रारूप में हस्ताक्षर संग्रहीत और पुनःप्राप्त करने के लिए `cosign` का उपयोग कर सकते हैं।
### चीज़ें जो संभवतः बदलनी चाहिए
---
[Read more](https://github.com/sigstore/cosign)