SHA256/SHA512를 사용하여 인증서 생성 문제

SHA256/SHA512를 사용하여 인증서 생성 문제

SHA256 또는 SHA512를 사용하여 자체 서명된 인증서를 생성하고 싶지만 문제가 발생했습니다. 이 작업을 자동으로 수행하는 스크립트를 만들었습니다.

#!/bin/bash

set -e

echo "WORKSPACE: $WORKSPACE"

SSL_DIR=$(pwd)/httpd_ssl_certs
OPENSSL_CNF=$(pwd)/openssl.cnf

if [ -d "$SSL_DIR" ]; then
        rm -rvf "$SSL_DIR"
fi

mkdir -vp "$SSL_DIR"

pushd "$SSL_DIR"

# check if openssl.cnf exists
if [ ! -f "$OPENSSL_CNF" ]; then
    echo "Could not find $OPENSSL_CNF. Build will be exited."
    exit 1
fi

echo " - create private key"
openssl genrsa -out server.key.template 2048
echo " - create signing request"
openssl req -nodes -new -sha256 -config $OPENSSL_CNF -key server.key.template -out server.csr.template
echo " - create certificate"
openssl x509 -req -in server.csr.template -signkey server.key.template -out server.crt.template -extfile $OPENSSL_CNF

openssl.cnf구성이 포함된 파일이 있습니다 .

[ ca ]
default_ca                      = CA_default

[ CA_default ]
# how long to certify
default_days                    = 365
# how long before next CRL
default_crl_days                = 30
# use public key default MD
default_md                      = sha256

# keep passed DN ordering
preserve                        = no

policy                          = policy_anything

[ policy_anything ]
countryName                     = optional
stateOrProvinceName             = optional
localityName                    = optional
organizationName                = optional
organizationalUnitName          = optional
commonName                      = optional
emailAddress                    = optional

[ req ]
default_bits                    = 2048
default_keyfile                 = server.key.template
distinguished_name              = req_distinguished_name
prompt                          = no
encrypt_key                     = no
# add default_md to [ req ] for creating certificates with SHA256
default_md                      = sha256

[ req_distinguished_name ]
countryName                     = "AB"
stateOrProvinceName             = "CD"
localityName                    = "Some town"
organizationName                = "XXX Y"
organizationalUnitName          = "XXX Y"
commonName                      = "localhost"
emailAddress                    = "[email protected]"

이 openssl.cnf를 사용하여 스크립트를 실행하면 인증서를 얻지만 인증서는 항상 SHA1로 암호화됩니다. 다음 명령으로 확인했습니다 openssl x509 -in server.crt.template -text -noout | grep 'Signature. 나는 항상 다음과 같은 결과를 얻습니다.

Signature Algorithm: sha1WithRSAEncryption
Signature Algorithm: sha1WithRSAEncryption

누구든지 나에게 힌트를 줄 수 있습니까? 거기에 가짜가 무엇입니까?

답변1

다음은 openssl을 사용하여 CSR(인증서 서명 요청)을 생성하는 방법에 대한 관련 참고 사항입니다(인증서 자체는 아님).

자리 표시자를 사용하는 구문은 다음과 같습니다.

openssl req -new -newkey rsa:4096 -sha256 -nodes -out {DOMAIN.TLD}.rsa.csr -keyout {DOMAIN.TLD}.rsa.pkey -subj "/C={US}/ST={STATE| |프로방스}/L={도시}/O={회사 이름}/CN={도메인 이름.TLD}"

이것이 바로 제가 자체 CSR을 생성하고 이를 SSL 인증서 공급자에게 제공하는 데 사용하는 명령입니다.

openssl req -new -newkey rsa:4096 -sha256 -nodes -out rustbeltrebellion.com.csr -keyout rustbeltrebellion.rsa.pkey -subj "/C=US/ST=OHIO/L=EASTLAKE/O=RUSTBELTREBELLION/CN=RUSTBELTREBELLION.COM"

CSR의 이점은 개인 키가 더욱 비공개적으로 유지된다는 것입니다. 인증서를 생성하는 방법은 두 가지뿐입니다. openssl 라이브러리를 통해 개인 키를 실행하거나 openssl 라이브러리를 통해 CSR을 실행하는 것입니다. 문제가 해결되면 둘 다 기능적으로 동일한 인증서를 제공합니다. 그 중 하나는 개인 키를 비공개로 유지하는 것입니다(CSR이 수행하는 작업).

관련 정보