localhost에서 SSL을 구현하는 올바른 방법

localhost에서 SSL을 구현하는 올바른 방법

Chrome과 Mozilla에서 허용되는 로컬 호스트에서 자체 서명된 인증서를 생성하는 현대적인 방법을 제안할 수 있는 사람이 있나요?

openssl 빌드를 시도했지만 Mozilla는 게시자를 신뢰할 수 없다고 불평했습니다.

센토스 7, nginx

답변1

경고: 자체 인증 기관을 운영하는 지뢰밭에 뛰어들기 전에 보안에 미치는 영향을 조사하고 싶을 수도 있습니다!

하지만 꼭 해야 한다면 https://localhost/경고 메시지 없이 신속하고 더러운 CA를 읽어보세요...

다음 텍스트 파일을 만듭니다.

# OpenSSL configuration for Root CA

[ req ]

prompt             = no
string_mask        = default

# The size of the keys in bits:
default_bits       = 2048
distinguished_name = req_distinguished_name
x509_extensions    = x509_ext

[ req_distinguished_name ]

# Note that the following are in 'reverse order' to what you'd expect to see.

countryName = gb
organizationName = Test
commonName = Test Root CA

[ x509_ext ]

basicConstraints=critical,CA:true,pathlen:0
keyUsage=critical,keyCertSign,cRLSign

다른 이름으로 저장한 root.cnf후 요청 생성:

$ openssl req -x509 -new -keyout root.key -out root.cer -config root.cnf

root.cer이렇게 하면 비밀로 유지해야 하는 루트 CA 인증서( )와 루트 CA 개인 키( )가 생성됩니다 . root.key개인 키 비밀번호를 묻는 메시지가 표시됩니다. 강력한 비밀번호를 선택했는지 확인하세요.

이제 서버 인증서에 대한 구성 파일을 만듭니다.

# OpenSSL configuration for end-entity cert

[ req ]

prompt             = no
string_mask        = default

# The size of the keys in bits:
default_bits       = 2048
distinguished_name = req_distinguished_name

x509_extensions    = x509_ext

[ req_distinguished_name ]

# Note that the following are in 'reverse order' to what you'd expect to see.

countryName = gb
organizationName = Test
commonName = localhost

[ x509_ext ]

keyUsage=critical,digitalSignature,keyAgreement

subjectAltName = @alt_names

# Multiple Alternate Names are possible
[alt_names]
DNS.1 = localhost
# DNS.2 = altName.example.com

다른 이름으로 저장 server.cnf하고 요청을 생성합니다.

openssl req -nodes -new -keyout server.key -out server.csr -config server.cnf

server.key위의 내용은 보호해야 하는 또 다른 개인 키( )를 생성합니다 . 이 경우 키는 비밀번호로 보호되지 않지만 -nodes옵션을 제거하여 비밀번호를 추가할 수 있습니다.

마지막으로 편의를 위해 새 루트 CA와 파일의 확장자를 사용하여 요청에 서명합니다 server.cnf.

$ openssl x509 -req -in server.csr -CA root.cer -CAkey root.key -set_serial 123 -out server.cer -extfile server.cnf -extensions x509_ext

참고: 이 옵션에 대해 임의의 숫자를 선택하십시오 -set_serial.

루트 CA를 생성할 때 입력한 비밀번호를 입력하라는 메시지가 표시됩니다.

server.cer서버 인증서( )가 생성됩니다.

root.cer이제 브라우저가 새 CA를 신뢰하도록 루트 CA 인증서( )를 Firefox의 신뢰 앵커 저장소에 추가하세요.

OpenSSL을 임시 웹 서버로 사용하여 테스트를 실행합니다.

$ sudo openssl s_server -key server.key -cert server.cer -accept 443 -www

참고: 이미 포트 443에서 실행 중인 서버가 있는 경우 오류가 발생할 수 있습니다. 이 경우 실행 중인 서버를 중지하거나 위의 포트 번호 끝을 (예:)로 변경하여 사용하지 않는 다른 포트로 변경하십시오.-accept 8443 -www

Firefox를 사용하여 탐색할 때 https://localhost(또는 https://localhost:8443위에서 포트 번호를 변경한 경우) 이제 OpenSSL 설치에서 제공할 수 있는 경고 및 암호 목록이 표시되지 않습니다.

결과에 만족하면 원래 웹 서버에 server.key및를 추가하고 그에 따라 구성하십시오.server.cer

관련 정보