2010-03-31 15:38:27 +0000 2010-03-31 15:38:27 +0000
63
63

Jak stworzyć własny łańcuch certyfikatów?

Chciałbym skonfigurować mój własny OCSP Responder (tylko do celów testowych). Wymaga to ode mnie posiadania certyfikatu głównego i kilku certyfikatów wygenerowanych na jego podstawie.

Udało mi się stworzyć samopodpisany certyfikat przy użyciu openssl. Chcę go użyć jako certyfikatu głównego. Następnym krokiem będzie utworzenie certyfikatów pochodnych. Nie mogę jednak znaleźć dokumentacji, jak to zrobić. Czy ktoś wie, gdzie mogę znaleźć te informacje?

Edit Patrząc wstecz, moje pytanie nie jest jeszcze w pełni odpowiedzią. Aby wyjaśnić problem, będę reprezentował mój łańcuch certyfikatów w ten sposób:

ROOT —–> A —–> B —–> C —–> …

Obecnie jestem w stanie utworzyć certyfikaty ROOT i A, ale nie dowiedziałem się, jak utworzyć dłuższy łańcuch.

Moje polecenie do utworzenia certyfikatu root to:

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

Certyfikat A tworzę w ten sposób:

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

To polecenie niejawnie zależy od certyfikatu głównego, dla którego znajduje wymagane informacje w pliku konfiguracyjnym openssl.

Certyfikat B musi jednak opierać się tylko na A, który nie jest zarejestrowany w pliku konfiguracyjnym, więc poprzednie polecenie nie zadziała w tym przypadku.

Jakiej linii poleceń powinienem użyć, aby utworzyć certyfikaty B i kolejne?

Edit Odpowiedź znalazłem w tym artykule . Certyfikat B (łańcuch A - B) może być utworzony za pomocą tych dwóch poleceń:

# 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

Zmieniłem również plik openssl.cnf:

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

To podejście wydaje się działać dobrze.

Odpowiedzi (4)

28
28
28
2010-03-31 18:03:18 +0000

Możesz użyć OpenSSL bezpośrednio.

  1. Utwórz klucz prywatny urzędu certyfikacji (jest to Twój najważniejszy klucz):

  2. Utwórz certyfikat CA z własnym podpisem:

  3. Wystaw certyfikat klienta, najpierw generując klucz, następnie żądając (lub używając tego dostarczonego przez zewnętrzny system) i podpisując certyfikat przy użyciu klucza prywatnego Twojego CA:

(Możesz potrzebować dodać kilka opcji, ponieważ używam tych poleceń razem z moim plikiem openssl.conf. Być może będziesz musiał najpierw skonfigurować swój własny plik .conf).

14
14
14
2012-04-29 17:54:40 +0000

Po utworzeniu CA możesz go użyć do podpisania w ten sposób :

  • Utwórz klucz :

  • Utwórz csr :

  • Podpisz go :

Twoja zmiana :

basicConstraints=CA:TRUE # prev value was FALSE

oznacza, że certyfikaty, które wystawiasz mogą być używane do podpisywania innych certyfikatów.

9
9
9
2010-03-31 17:51:10 +0000

OpenSSL jest dostarczany ze skryptem Perla “CA.pl”, który pomaga utworzyć samodzielnie podpisany certyfikat root CA wraz z odpowiadającym mu kluczem prywatnym oraz kilkoma prostymi plikami i katalogami, które pomagają śledzić wszystkie przyszłe certyfikaty podpisywane (a.k.a. wydawane) przez root CA. Pomaga również generować inne pary kluczy i żądania podpisania certyfikatu (CSR), a także przetwarzać te CSR-y (czyli wystawiać dla nich certyfikaty) i nie tylko.

Zauważ, że wiele produktów wymaga, aby certyfikaty CA zawierały pewien atrybut oznaczający je jako certyfikaty CA, w przeciwnym razie nie będą one akceptowane jako ważni sygnatariusze/wydawcy innych certyfikatów. Jeśli utworzony przez Ciebie self-signed cert nie zawiera tego atrybutu, możesz mieć problem z uzyskaniem od innych programów traktowania go jako ważnego certyfikatu CA root.

Jeśli dobrze pamiętam, składnia wygląda mniej więcej tak:

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
-1
-1
-1
2018-11-06 22:59:55 +0000

Znalazłem ten post: https://stackoverflow.com/questions/19665863/how-do-i-use-a-self-signed-certificate-for-a-https-node-js-server

Jest to dla Node.JS, ale skrypt w tym GitHubie repo używa poleceń openSLL do utworzenia root CA cert i Domain cert.

Uruchom przy użyciu: bash make-root-ca-and-certificates.sh 'example.com'

Lub dla localhost używając: 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
```.