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の利点は、秘密鍵がさらに非公開に保たれることです。証明書を生成する方法は2つだけです。 opensslライブラリを介して秘密鍵を実行するか、opensslライブラリを介してCSRを実行します。問題が解決したら、両方とも機能的に同じ証明書を提供します。そのうちの1つは、秘密鍵を秘密に保つことです(CSRが実行する作業)。

関連情報