अपनी खुद की सर्टिफिकेट चेन कैसे बनाएं?


62

मैं अपना खुद का OCSP रिस्पॉन्डर सेटअप करना चाहता हूं (सिर्फ परीक्षण उद्देश्यों के लिए)। इसके लिए मुझे रूट प्रमाणपत्र और उससे उत्पन्न कुछ प्रमाणपत्रों की आवश्यकता होती है।

मैंने ओपनस् एल का उपयोग करके एक स्व-हस्ताक्षरित प्रमाणपत्र बनाने में कामयाबी हासिल की है। मैं इसे रूट प्रमाण पत्र के रूप में उपयोग करना चाहता हूं। अगला कदम व्युत्पन्न प्रमाण पत्र बनाने के लिए होगा। मैं यह कैसे करना है पर प्रलेखन खोजने के लिए प्रतीत नहीं कर सकते। क्या किसी को पता है कि मुझे यह जानकारी कहां मिल सकती है?

संपादित करें
पूर्वव्यापी में, मेरे प्रश्न का अभी तक पूरी तरह से उत्तर नहीं दिया गया है। इस समस्या को स्पष्ट करने के लिए मैं अपनी प्रमाण पत्र श्रृंखला का प्रतिनिधित्व करता हूँ:

जड़ -> ए -> बी -> सी -> ...

मैं वर्तमान में ROOT और A प्रमाणपत्र बनाने में सक्षम हूं, लेकिन मुझे यह पता नहीं चला है कि लंबी श्रृंखला कैसे बनाई जाए।

रूट प्रमाणपत्र बनाने की मेरी आज्ञा है:

openssl req -new -newkey rsa:1024 -nodes -out ca.csr -keyout ca.key
openssl x509 -trustout -signkey ca.key -days 365 -req -in ca.csr -out ca.pem

प्रमाणपत्र ए इस तरह बनाया गया है:

openssl genrsa -out client.key 1024
openssl req -new -key client.key -out client.csr
openssl ca -in client.csr -out client.cer

यह कमांड मूल रूप से रूट सर्टिफिकेट पर निर्भर करता है, जिसके लिए वह ओपनस्क् कॉन्फ़िगरेशन फ़ाइल में आवश्यक जानकारी पाता है।

प्रमाणपत्र B को केवल A पर निर्भर होना चाहिए, जो कि कॉन्फ़िगर फ़ाइल में पंजीकृत नहीं है, इसलिए पिछली कमांड यहां काम नहीं करेगी।

B और उसके बाद प्रमाण पत्र बनाने के लिए मुझे किस कमांड लाइन का उपयोग करना चाहिए?

संपादित करें
मुझे इस लेख में उत्तर मिला । प्रमाणपत्र B (श्रृंखला A -> B) इन दो आदेशों के साथ बनाया जा सकता है:

# Create a certificate request
openssl req -new -keyout B.key -out B.request -days 365

# Create and sign the certificate
openssl ca -policy policy_anything -keyfile A.key -cert A.pem -out B.pem -infiles B.request

मैंने भी Opensl.cnf फाइल बदली:

[ usr_cert ]
basicConstraints=CA:TRUE # prev value was FALSE

यह दृष्टिकोण अच्छी तरह से काम कर रहा है।


एडिट सेक्शन में नीचे का लिंक टूटा हुआ है
उत्साही

2
2015 तक इस पद के अंतिम संपादन पर उल्लिखित लेख मर चुका है। तो आप एक वेब संग्रह के माध्यम से पृष्ठ की जांच कर सकते हैं : web.archive.org/web/20100504162138/http://www.ibm.com/…
Iomanip

जवाबों:


28

आप सीधे OpenSSL का उपयोग कर सकते हैं।

  1. प्रमाणपत्र प्राधिकरण निजी कुंजी बनाएं (यह आपकी सबसे महत्वपूर्ण कुंजी है):

    openssl req -new -newkey rsa:1024 -nodes -out ca.csr -keyout ca.key
    
  2. अपना CA स्व-हस्ताक्षरित प्रमाणपत्र बनाएं:

    openssl x509 -trustout -signkey ca.key -days 365 -req -in ca.csr -out ca.pem
    
  3. पहले कुंजी बनाकर ग्राहक प्रमाणपत्र जारी करें, फिर अनुरोध करें (या बाहरी सिस्टम द्वारा प्रदान की गई एक का उपयोग करें) फिर अपने सीए की निजी कुंजी का उपयोग करके प्रमाण पत्र पर हस्ताक्षर करें:

    openssl genrsa -out client.key 1024
    openssl req -new -key client.key -out client.csr
    openssl ca -in client.csr -out client.cer
    

(आपको कुछ विकल्प जोड़ने की आवश्यकता हो सकती है क्योंकि मैं इन कमांडों का उपयोग अपनी Opensl.conf फ़ाइल के साथ कर रहा हूं। आपको अपनी .conf फ़ाइल को पहले सेटअप करने की आवश्यकता हो सकती है।)


धन्यवाद, आपने निर्देश दिया कि मेरी खुलने वाली फ़ाइल के कुछ ट्विक करने के बाद काम किया जाए।
स्टैक्डक्रोकल्ड

3
@ व्हाट: नोट एक पूर्ण उत्तर के लिए प्रश्न का एक और चरण है - एक और प्रमाण पत्र कैसे बनाया जाए जो केवल चरण 3 में बनाए गए प्रमाण पत्र पर निर्भर करता है, लेकिन मूल प्रमाण पत्र नहीं।
क्वैक

3
"CA निजी कुंजी लोड करने में असमर्थ" के साथ अंतिम चरण में विफल रहता है; मैं कुंजी और आपूर्ति के साथ वहां भाग ले सकता हूं openssl ca -in client.csr -out client.cer -cern ca.pem -keyfile ca.key, लेकिन यह एक demoCAनिर्देशिका और विभिन्न अभ्यावेदन चाहता है ।
इरिडन

23
"आपको कुछ विकल्प जोड़ने की आवश्यकता हो सकती है ..." वास्तव में इस उत्तर से उपयोगिता को हटा देता है।
Zach

14

एक बार जब आप अपना सीए बना लेते हैं तो आप इसका इस्तेमाल इस प्रकार कर सकते हैं:

  • एक कुंजी बनाएँ:

    openssl genrsa -out key_A.key  1024
    
  • एक सीएसआर बनाएं:

    openssl req -new -key key_A.key -out csr_A.csr
    You are about to be asked to enter information etc....
    
  • इस पर हस्ताक्षर करें :

    openssl x509 -req -days 365 -in csr_A.csr -CA CA_certificate_you_created.crt \
    -CAkey CA_key_you_created.key -set_serial 01 -out crt_A.crt
    

    और इतने और * _B साथ * _a जगह पर CA_certificate_you_created.crtसाथ crt_A.crtऔर CA_key_you_created.keyसाथkey_A.key

आपका परिवर्तन:

basicConstraints=CA:TRUE  # prev value was FALSE

इसका मतलब है कि आपके द्वारा जारी किए गए प्रमाणपत्र का उपयोग अन्य प्रमाण पत्रों पर हस्ताक्षर करने के लिए किया जा सकता है।


thx, बहुत मददगार
flotto

1
.Crt फ़ाइल क्या है?
मिक्याड

9

OpenSSL एक पर्ल स्क्रिप्ट "CA.pl" के साथ आता है जो आपको एक स्व-हस्ताक्षरित रूट CA प्रमाण पत्र बनाने में मदद करने के लिए , मेल खाती निजी कुंजी के साथ, साथ ही आपके द्वारा हस्ताक्षरित किसी भी भविष्य के सीट्स पर नज़र रखने में मदद करने के लिए कुछ सरल फ़ाइलें और निर्देशिकाएं (उर्फ मुद्दा) ) उस रूट के साथ सीए। यह आपको अन्य प्रमुख जोड़े और प्रमाणपत्र हस्ताक्षर अनुरोध (CSR) उत्पन्न करने में भी मदद करता है और आपको उन CSRs (जो उनके लिए अंक जारी करता है), और बहुत कुछ संसाधित करने में मदद करता है।

ध्यान दें कि कई उत्पादों को CA certs की आवश्यकता होती है, जिसमें उन्हें एक निश्चित विशेषता होती है, जो उन्हें CA certs के रूप में चिह्नित करते हैं, या उन्हें अन्य साइन के मान्य हस्ताक्षरकर्ता / जारीकर्ता के रूप में स्वीकार नहीं किया जाएगा। यदि आपके द्वारा बनाया गया स्व-हस्ताक्षरित प्रमाण पत्र में वह विशेषता नहीं है, तो आपको इसे मान्य रूट CA प्रमाणपत्र की तरह व्यवहार करने के लिए अन्य सॉफ़्टवेयर प्राप्त करने में समस्या हो सकती है।

अगर मुझे सही याद है, तो सिंटैक्स कुछ इस तरह से होता है:

CA.pl -newca    # Create a new root CA  

CA.pl -newreq   # Create a new CSR

CA.pl -sign     # Sign a CSR, creating a cert  

CA.pl -pkcs12   # Turn an issued cert, plus its matching private key and trust chain, into a .p12 file you can install on another machine    

4
यह मददगार था। Ubuntu 14.04 पर मैं कम से फ़ाइल मिली/usr/lib/ssl/misc/CA.pl
कॉलिन एम

-1

मुझे यह पोस्ट मिली: https://stackoverflow.com/questions/19665863/how-do-i-use-a-self-signed-certificate-for-a-https-node-js-server

यह Node.JS के लिए है, लेकिन इस GitHub रेपो में लिपि एक CA CA प्रमाणपत्र और डोमेन प्रमाणपत्र बनाने के लिए OpenSLL कमांड का उपयोग करती है।

रन का उपयोग करें: bash make-root-ca-and-certificates.sh 'example.com'

या उपयोग करने वाले लोकलहोस्ट के लिए: bash make-root-ca-and-certificates.sh 'localhost'

make-root-ca-and-certificates.sh

#!/bin/bash
FQDN=$1

# make directories to work from
mkdir -p certs/{server,client,ca,tmp}

# Create your very own Root Certificate Authority
openssl genrsa \
  -out certs/ca/my-root-ca.key.pem \
  2048

# Self-sign your Root Certificate Authority
# Since this is private, the details can be as bogus as you like
openssl req \
  -x509 \
  -new \
  -nodes \
  -key certs/ca/my-root-ca.key.pem \
  -days 1024 \
  -out certs/ca/my-root-ca.crt.pem \
  -subj "/C=US/ST=Utah/L=Provo/O=ACME Signing Authority Inc/CN=example.com"

# Create a Device Certificate for each domain,
# such as example.com, *.example.com, awesome.example.com
# NOTE: You MUST match CN to the domain name or ip address you want to use
openssl genrsa \
  -out certs/server/privkey.pem \
  2048

# Create a request from your Device, which your Root CA will sign
openssl req -new \
  -key certs/server/privkey.pem \
  -out certs/tmp/csr.pem \
  -subj "/C=US/ST=Utah/L=Provo/O=ACME Tech Inc/CN=${FQDN}"

# Sign the request from Device with your Root CA
# -CAserial certs/ca/my-root-ca.srl
openssl x509 \
  -req -in certs/tmp/csr.pem \
  -CA certs/ca/my-root-ca.crt.pem \
  -CAkey certs/ca/my-root-ca.key.pem \
  -CAcreateserial \
  -out certs/server/cert.pem \
  -days 500

# Create a public key, for funzies
# see https://gist.github.com/coolaj86/f6f36efce2821dfb046d
openssl rsa \
  -in certs/server/privkey.pem \
  -pubout -out certs/client/pubkey.pem

# Put things in their proper place
rsync -a certs/ca/my-root-ca.crt.pem certs/server/chain.pem
rsync -a certs/ca/my-root-ca.crt.pem certs/client/chain.pem
cat certs/server/cert.pem certs/server/chain.pem > certs/server/fullchain.pem
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.