인증 기관이 작동하지 않습니다.

인증 기관이 작동하지 않습니다.

제가 이해한 것이 맞다면 CA는 웹 서비스용 여러 서버 인증서 서버(예: FTP 서버, 웹 서버, Nextcloud, OpenVPN)를 설치할 필요 없이 해당 CA 인증서로 서명된 다른 인증서를 확인하는 데 사용되는 상위 인증서와 같습니다. 잠깐만요?

내 서비스 중 하나에 액세스하려고 할 때 안전하게 연결할 수 있도록 내 로컬 네트워크와 WAN을 통해 내 친구의 네트워크에 배포할 수 있는 CA 인증서를 만들려고 합니다. 예를 들어, 내가 호스팅하는 각 서비스에 대해 여러 인증서 대신 CA 인증서 하나만 제공할 수 있습니다.

모든 서버 인증서는 분명히 CA에 의해 서명되므로 해당 컴퓨터에 CA 인증서를 설치하면 처음에 CA로 서명되었으므로 서버 인증서가 자동으로 확인됩니다. 옳은?

문제는 오늘 Windows 클라이언트 PC에 CA 인증서를 설치하려고 시도하고 HTTPS를 통해 OpenMediaVault GUI에 액세스하려고 시도했지만 여전히 안전하지 않은 경고 화면이 표시된다는 것입니다.

다음 코드 블록은 CA 및 서버 인증서의 전체 생성 프로세스를 보여줍니다. 모든 파일과 폴더를 볼 수 있도록 디렉토리 트리의 스크린샷을 첨부하겠습니다. 구성 파일의 내용도 포함하겠습니다.

나의 가이드

# Make OpenSSL Directory
mkdir ~/Desktop/OpenSSL

# Make Child Directories
mkdir -p ~/Desktop/OpenSSL/{ca,configs,"csr's",keys}

# Change Directory Into OpenSSL Directory
cd ~/Desktop/OpenSSL

# Create CA Certificate
openssl req -x509 -newkey rsa:4096 -keyout ca/cakey.pem -out ca/cacert.pem -days 3650 -sha256 -nodes -config configs/ca_openssl.cnf

# Create serial file
echo '01' > serial

# Create index.txt
touch index.txt

##
### Create server certificates ###
##

# OpenMediaVault
openssl genrsa -out keys/OpenMediaVault.pem 4096
openssl req -new -key keys/OpenMediaVault.pem -config configs/openmediavault_openssl.cnf -out "csr's"/OpenMediaVault.csr

# OpenWrt
openssl genrsa -out keys/OpenWrt.pem 4096
openssl req -new -key keys/OpenWrt.pem -config configs/openwrt_openssl.cnf -out "csr's"/OpenWrt.csr

##
### Sign Server Certificates With CA ###
##

# OpenMediaVault
openssl x509 -req -CA ca/cacert.pem -CAkey ca/cakey.pem -in "csr's"/OpenMediaVault.csr -out certificates/OpenMediaVault.crt -extfile configs/openmediavault_openssl.cnf -extensions v3_req -CAserial serial

# OpenWrt
openssl x509 -req -CA ca/cacert.pem -CAkey ca/cakey.pem -in "csr's"/OpenWrt.csr -out certificates/OpenWrt.crt -extfile configs/openwrt_openssl.cnf -extensions v3_req -CAserial serial

# Convert PEM to CRT
openssl x509 -outform der -in ca/cacert.pem -out "My Custom CA".crt

# Convert PEM to PKCS12
openssl pkcs12 -export -out certificate.pfx -inkey ca/cakey.pem -in ca/cacert.pem -certfile CACert.crt

'ca_openssl.cnf'

[ ca ]
default_ca    = CA_default        # The default ca section

[ CA_default ]
dir                   = ~/Desktop/"OpenSSL Certificates"
certs               = $dir/certs
crl_dir               = $dir/crl
database           = $dir/index.txt
new_certs_dir       = $dir/newcerts
certificate        = $dir/cacert.pem
serial             = $dir/serial
crlnumber          = $dir/crlnumber
cr                 = $dir/crl.pem
private_key        = $dir/private/cakey.pem

[ req ]

# Don't prompt for the Domanin Name (DN). Use configured values instead.
# This Saves having to type in your DN each time.

prompt              = no
string_mask         = default
distinguished_name  = req_distinguished_name
x509_extensions     = v3_ca

# The size of the key in bits
default_bits    = 4096

[ req_distinguished_name ]
countryName             = GB
stateOrProvinceName     = SOME_PROVINCE
localityName            = SOME_CITY
organizationName        = domain
organizationalUnitName  = domain
commonName              = domain Certificate Authority
emailAddress            = [email protected]

[ v3_ca ]
# Extensions added to the request

basicConstraints = critical, CA:TRUE
keyUsage =         critical, keyCertSign, cRLSign

'openmediavault_openssl.cnf'

[ req ]

# Don't prompt for the Domanin Name (DN). Use configured values instead.
# This Saves having to type in your DN each time.

prompt              = no
string_mask         = default
distinguished_name  = req_distinguished_name
req_extensions      = v3_req

# The size of the key in bits
default_bits    = 4096

[ req_distinguished_name ]
countryName             = GB
stateOrProvinceName     = SOME_PROVINCE
localityName            = SOME_CITY
organizationName        = OpenMediaVault
organizationalUnitName  = OpenMediaVault
commonName              = OpenMediaVault.local

[ v3_req ]
# Extensions to add to a certificate request

basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alternative_names

[ alternative_names ]
DNS.0   = domain.com
IP.0    = 192.168.1.123

'openwrt_openssl.cnf'

[ req ]
# Don't prompt for the Domanin Name (DN). Use configured values instead.
# This Saves having to type in your DN each time.

prompt              = no
string_mask         = default
distinguished_name  = req_distinguished_name
req_extensions      = v3_req

# The size of the key in bits
default_bits    = 4096

[ req_distinguished_name ]
countryName             = GB
stateOrProvinceName     = SOME_PROVINCE
localityName            = SOME_CITY
organizationName        = OpenWrt
organizationalUnitName  = OpenWrt
commonName              = OpenWrt.local

[ v3_req ]
# Extensions to add to a certificate request

basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alternative_names

[ alternative_names ]
DNS.0   = domain.com
IP.0    = 192.168.1.1

디렉토리 트리

"/certificates" 디렉터리에서 "OpenMediaVault.crt"를 설치하고 "/keys" 디렉터리에서 "OpenMediaVault.pem"을 설치했습니다.

"certificate.pfx" 파일은 "내 가이드" 섹션의 마지막 명령의 결과이며 Windows certmgr로 가져왔습니다. 저는 Firefox의 인증 옵션과 함께 "My Custom CA.crt" 파일을 사용합니다.

내가 뭘 잘못했나요?

매우 감사합니다

~ 할 것이다

업데이트 1

문제의 원인을 찾은 것 같아요. 내가 방문할 때https://openmediavault.local(이것은 인증서에 설정된 일반 이름입니다.) "인증서는 다음 이름에만 유효합니다."라는 메시지가 나타납니다. 내 화면에 표시된 두 개(그 중 하나는 개인 정보 보호를 위해 가려져 있음)는 내가 추가한 subjectAltNames입니다. 대체 이름은 유효하지만 CN은 유효하지 않은 이유는 무엇입니까? 나는 출신https://192.168.1.123Firefox 주소 표시줄에 녹색 자물쇠가 있습니다. 여기에 이미지 설명을 입력하세요.

업데이트 2

알려드리기 위해 subjectAltName에 CN을 추가했는데 모든 것이 잘 작동합니다.

OpenSSL과 관련된 참고 사항으로 이제 OpenVPN 인증서를 만들고 싶습니다. OpenSSL을 사용하여 만든 CA가 내 OpenVPN 인증서에 서명할 수 있나요?

답변1

예, SAN(주체 대체 이름) 확장이 있는 경우 브라우저는 더 이상 CN을 확인하지 않습니다. 이는 다음에서 지정됩니다.RFC 섹션 2818. 3.1, Chrome은 약 2년 전에 이 작업을 시작했으며(Chrome 58) Firefox는 약 3년 전에 공개적으로 발행된 인증서에 대해 동일한 작업을 수행했습니다(Firefox 48). Firefox에 개인 CA에 대한 예외가 있는지는 모르겠습니다. (그런데, 직접 디버깅을 잘 하셨습니다!)

그럼에도 불구하고 SubjectAltNames에서 사용하려는 모든 이름을 사용하여 인증서를 재발급해야 합니다.

관련 정보