Kendi sertifika zincirimi nasıl oluşturabilirim?


62

Kendi OCSP Yanıtlayıcımı kurmak istiyorum (sadece test amaçlı). Bu benim bir kök sertifikamı ve ondan üretilen birkaç sertifikamın olmasını gerektirir.

Openssl kullanarak kendinden imzalı bir sertifika oluşturmayı başardım. Kök sertifikası olarak kullanmak istiyorum. Bir sonraki adım, türetilmiş sertifikaları oluşturmak olacaktır. Bununla birlikte, bunun nasıl yapılacağına dair belgeleri bulamıyorum. Bu bilgiyi nerede bulabileceğimi bilen var mı?

Düzenleme
Geriye dönük olarak, sorum henüz tam olarak yanıtlanmadı. Sorunu netleştirmek için sertifika zincirimi şöyle göstereceğim:

KÖK -> A -> B -> C -> ...

Şu anda KÖK ve A sertifikaları oluşturabiliyorum, ancak daha uzun bir zincir yapmayı bulamadım.

Kök sertifika oluşturma komutum:

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

Sertifika A şöyle yaratılır:

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

Bu komut örtük olarak, openssl yapılandırma dosyasında gerekli bilgileri bulduğu kök sertifikasına bağlıdır.

Bununla birlikte, B Sertifikası yalnızca config dosyasına kayıtlı olmayan A'ya dayanmalıdır, bu nedenle önceki komut burada çalışmaz.

B ve sonraki sertifikalarını oluşturmak için hangi komut satırını kullanmalıyım?

Düzenle Bu yazıda
cevabı buldum . Bu iki komutla B Sertifikası (zincir A -> B) oluşturulabilir:

# 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

Openssl.cnf dosyasını da değiştirdim:

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

Bu yaklaşım iyi çalışıyor gibi görünüyor.


Düzenleme bölümünde altındaki link kopmuş
enthusiasticgeek

2
2015 yılına kadar bu yazının son düzenlemesinde bahsedilen makale ölmüştür. Böylece, sayfayı bir web arşivi aracılığıyla kontrol edebilirsiniz : web.archive.org/web/20100504162138/http://www.ibm.com/…
Iomanip

Yanıtlar:


28

OpenSSL'yi doğrudan kullanabilirsiniz.

  1. Sertifika Yetkilisi özel anahtarı oluşturun (bu, en önemli anahtarınızdır):

    openssl req -new -newkey rsa:1024 -nodes -out ca.csr -keyout ca.key
    
  2. CA kendinden imzalı sertifikanızı oluşturun:

    openssl x509 -trustout -signkey ca.key -days 365 -req -in ca.csr -out ca.pem
    
  3. Önce anahtarı oluşturarak bir istemci sertifikası verin, ardından isteyin (veya harici sistem tarafından sağlanan bir sertifikayı kullanın), ardından CA'nızın özel anahtarını kullanarak sertifikayı imzalayın:

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

(Bu komutları openssl.conf dosyamla birlikte kullandığım için bazı seçenekler eklemeniz gerekebilir. Önce kendi .conf dosyanızı kurmanız gerekebilir.)


Teşekkürler, openssl.conf dosyamda bir değişiklik yaptıktan sonra talimatlar verdiniz.
StackedCrooked

3
@twk: Sorunun tam bir cevap için bir adım daha gerekli olduğunu unutmayın - sadece 3. adımda yaratılan sertifikaya bağlı, ancak kök sertifikaya bağlı olmayan başka bir sertifika nasıl oluşturulur.
quack quixote

3
"CA özel anahtarını yükleyemiyor" ile son adımda başarısız oluyor; Anahtarı sağlayarak oraya girebilirim ve sertifika verebilirim openssl ca -in client.csr -out client.cer -cern ca.pem -keyfile ca.key, ancak bir demoCArehber ve çeşitli yöneticiler istiyor .
Iiridayn

23
"Bazı seçenekler eklemeniz gerekebilir ..." yardımcı programı gerçekten bu yanıttan kaldırıyor.
Zach,

14

CA'nızı oluşturduktan sonra bunu imzalamak için kullanabilirsiniz:

  • Bir anahtar oluşturun:

    openssl genrsa -out key_A.key  1024
    
  • Bir csr oluşturun:

    openssl req -new -key key_A.key -out csr_A.csr
    You are about to be asked to enter information etc....
    
  • İmzala :

    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
    

    ve böylece * _A'nın * _B ile ve CA_certificate_you_created.crtile crt_A.crtve CA_key_you_created.keyile değiştirilmesikey_A.key

Değişiminiz:

basicConstraints=CA:TRUE  # prev value was FALSE

verdiğiniz sertifikaların diğer sertifikaları imzalamak için kullanılabileceği anlamına gelir.


thx, çok yararlı
flotto

1
Ne .crt dosya?
MickyD

9

OpenSSL , eşleşen özel anahtarla birlikte kendinden imzalı bir kök CA sertifikası oluşturmanıza yardımcı olmak için bir Perl komut dosyası "CA.pl" ile birlikte gelir; ) bu kök CA ile. Ayrıca, diğer anahtar çiftleri ve sertifika imzalama isteklerini (CSR'ler) oluşturmanıza yardımcı olur ve bu CSR'leri (yani, onlar için sertifika verir) ve daha fazlasını işlemenize yardımcı olur.

Birçok ürünün, CA sertifikalarının, CA sertifikaları olarak işaretleyen belirli bir nitelik içermesini gerektirdiğini veya başka sertifikaların geçerli imzalayıcıları / ihraççıları olarak kabul edilmeyeceğini unutmayın. Oluşturduğunuz kendinden imzalı sertifika bu özelliği içermiyorsa, geçerli bir kök CA sertifikası gibi değerlendirmek için başka bir yazılımı edinmede sorun yaşayabilirsiniz.

Doğru hatırlıyorsam, sözdizimi şöyle devam eder:

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
Bu yardımcı oldu. 14.04 tarihinde Ubuntu'da dosyayı buldum/usr/lib/ssl/misc/CA.pl
Colin M

-1

Bu yazıyı buldum: https://stackoverflow.com/questions/19665863/how-do-i-use-a-self-signed-certificate-for-a-https-node-js-server

Node.JS içindir ancak bu GitHub deposundaki komut dosyası, bir kök CA sertifikası ve Etki alanı sertifikası oluşturmak için openSLL komutlarını kullanır.

Kullanarak çalıştır: bash make-root-ca-and-certificates.sh 'example.com'

Veya localhost kullanarak: 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.