program story

개발을 위해 도메인 이름에 대한 자체 서명 인증서를 작성하는 방법은 무엇입니까?

inputbox 2020. 7. 24. 20:50
반응형

개발을 위해 도메인 이름에 대한 자체 서명 인증서를 작성하는 방법은 무엇입니까?


나는이 subdomain.example.com내가 개발 목적으로 사용하는 것이. 내 웹 응용 프로그램 솔루션에는 웹 API 등이 포함되어 있으므로 외부 시스템에서 호출해야하므로 localhost를 사용하지 않습니다.

이제 SSL을 테스트하고 subdomain.example.com개발 도메인 이름에 대한 인증서가 필요합니다 .

http://technet.microsoft.com/en-us/library/cc753127(v=ws.10).aspx에 설명 된대로 자체 서명 된 인증서를 만들려고 했지만이 인증서는 로컬 호스트에서만 작동합니다. 이 인증서를 내 목적으로 사용할 수 있습니까? 아니면 개발 하위 도메인에 대해 자체 서명을 만들어야합니까? 개발 서브 도메인에 대해 자체 서명 인증을 작성해야하는 경우이를 위해 어떤 유틸리티 또는 온라인 서비스 (무료)를 사용할 수 있습니까?


허용 된 답변이 질문을 완전히 해결하지 못하거나 적어도 문제를 해결하지 못했기 때문에이 정보를 추가하고 있습니다.

IIS의 자체 서명 된 인증서 기능을 사용하면 인증서의 CN (일반 이름)을 설정할 수 없으므로 선택한 하위 도메인에 바인딩 된 인증서를 만들 수 없습니다.

이 문제를 해결하는 한 가지 방법은 .Net 2.0 SDK와 함께 제공되는 makecert.exe를 사용하는 것입니다. 내 서버의 위치는 다음과 같습니다.

C:\Program Files\Microsoft.Net\SDK\v2.0 64bit\Bin\makecert.exe

서명 권한을 만들어 다음과 같이 LocalMachine 인증서 저장소에 저장할 수 있습니다 (이 명령은 관리자 계정 또는 관리자 권한 명령 프롬프트에서 실행해야합니다).

makecert.exe -n "CN=My Company Development Root CA,O=My Company,
 OU=Development,L=Wallkill,S=NY,C=US" -pe -ss Root -sr LocalMachine
 -sky exchange -m 120 -a sha1 -len 2048 -r

그런 다음 하위 도메인에 바인딩 된 인증서를 작성하고 새 기관에서 서명 할 수 있습니다.

-in 매개 변수의 값은 위의 권한을 생성하는 데 사용 된 CN 값과 같아야합니다.

makecert.exe -n "CN=subdomain.example.com" -pe -ss My -sr LocalMachine
 -sky exchange -m 120 -in "My Company Development Root CA" -is Root
 -ir LocalMachine -a sha1 -eku 1.3.6.1.5.5.7.3.1

그러면 Tom Hall의 게시물에 설명 된대로 인증서가 IIS 관리자에 사이트에 바인딩되도록 나타납니다.

http://www.mikeobrien.net/blog/creating-self-signed-wildcard의 훌륭한 블로그 게시물을 통해 Mike O'Brien에게이 솔루션에 대한 모든 제안


PowerShell 사용

Windows 8.1 및 Windows Server 2012 R2 (Windows PowerShell 4.0) 이상에서 새로운 New-SelfSignedCertificatecmdlet을 사용하여 자체 서명 된 인증서를 만들 수 있습니다 .

예 :

New-SelfSignedCertificate -DnsName www.mydomain.com -CertStoreLocation cert:\LocalMachine\My

New-SelfSignedCertificate -DnsName subdomain.mydomain.com -CertStoreLocation cert:\LocalMachine\My

New-SelfSignedCertificate -DnsName *.mydomain.com -CertStoreLocation cert:\LocalMachine\My

IIS 관리자 사용

  1. IIS 관리자 시작
  2. 서버 레벨의 IIS에서 서버 인증서를 선택하십시오.
  3. 작업 아래의 오른쪽에서 자체 서명 된 인증서 만들기를 선택하십시오.
  4. "인증서의 이름을 지정하십시오"라고 표시되면 적절한 이름으로 참조하십시오.
    1. 예 : www.domain.com또는subdomain.domain.com
  5. 그런 다음 왼쪽의 목록에서 웹 사이트를 선택하십시오.
  6. 작업 아래의 오른쪽에서 바인딩을 선택하십시오.
  7. 새 HTTPS 바인딩을 추가하고 방금 생성 한 인증서를 선택하십시오 (인증서가 와일드 카드 인증서 인 경우 호스트 이름을 지정해야합니다)
  8. 확인을 클릭하여 테스트하십시오.

특정 도메인에 대한 새 인증서를 만들려면

관리자로 Powershell ISE를 열고 다음 명령을 실행하십시오.

New-SelfSignedCertificate -DnsName *.mydomain.com, localhost -CertStoreLocation cert:\LocalMachine\My

새 인증서를 신뢰하려면

  • mmc.exe 열기
  • 콘솔 루트-> 인증서 (로컬 컴퓨터)-> 개인으로 이동하십시오.
  • 작성한 인증서를 선택하고 마우스 오른쪽 단추로-> 모든 태스크-> 내보내기를 클릭 한 후 내보내기 마법사에 따라 .pfx 파일을 작성하십시오.
  • 콘솔 루트-> 인증서-> 신뢰할 수있는 루트 인증 기관으로 이동하여 새 .pfx 파일을 가져옵니다.

인증서를 사이트에 바인딩하려면

  • IIS 관리자 열기
  • 사이트를 선택하고 오른쪽 분할 창에서 사이트 편집-> 바인딩을 선택하십시오.
  • 올바른 호스트 이름과 새 인증서로 새 https 바인딩을 추가하십시오.

주어진 답변과 추가 리소스의 비트와 조각을 결합하여 Windows에서 자체 서명 된 인증서를 통해 퍼즐을 풀어야했습니다. 여기 내 자신의 (그리고 희망적으로 완전한) 연습이 있습니다. 그것이 당신에게 내 고통스러운 학습 곡선의 일부를 절약하기를 바랍니다. 또한 인증서를 만들 때 조만간 나타나는 관련 주제에 대한 정보도 포함되어 있습니다.

Windows 10에서 자체 서명 된 인증서 작성

makecert.exe를 사용하지 마십시오. Microsoft에 의해 더 이상 사용되지 않습니다.
현대적인 방법은 Powershell 명령을 사용합니다.

윈도우 10:

관리자 권한으로 Powershell을 엽니 다.

New-SelfSignedCertificate  -DnsName "*.dev.local", "dev.local", "localhost"  -CertStoreLocation cert:\LocalMachine\My  -FriendlyName "Dev Cert *.dev.local, dev.local, localhost"  -NotAfter (Get-Date).AddYears(15)

Windows 8, Windows Server 2012 R2 :

이 시스템의 Powershell에는 -FriendlyName 및 -NotAfter 매개 변수가 없습니다. 위의 명령 줄에서 제거하십시오.
관리자 권한으로 Powershell을 엽니 다.

New-SelfSignedCertificate  -DnsName "*.dev.local", "dev.local", "localhost"  -CertStoreLocation cert:\LocalMachine\My

결과 인증서

위의 명령은 모두 도메인에 대한 인증서를 생성 localhost하고 *.dev.local.
또한 Win10 버전의 라이브 시간은 15 년이며 읽을 수있는 표시 이름은 "Dev Cert * .dev.local, dev.local, localhost"입니다.

업데이트 : 매개 변수에 여러 호스트 이름 항목을 제공하면 -DnsName(위 그림 참조)이 항목 중 첫 번째 항목이 도메인의 주제 (AKA 공통 이름)가됩니다. 모든 호스트 이름 항목의 전체 목록은 인증서의 SAN (Subject Alternative Name) 필드에 저장됩니다. (@BenSewards에게 지적 해 주셔서 감사합니다.)

생성 된 인증서는 IIS의 모든 HTTPS 바인딩에서 즉시 사용할 수 있습니다 (아래 지침).

인증서를 신뢰

새 인증서는 신뢰 체인의 일부가 아니므로 브라우저에서 신뢰할 수있는 것으로 간주되지 않습니다. 이를 변경하기 위해 인증서를 컴퓨터의 신뢰할 수있는 루트 CA에 대한 인증서 저장소로 복사합니다.

mmc.exe, 파일 → 스냅인 추가 / 제거 → 왼쪽 열에서 "인증서"선택 → 추가 → "컴퓨터 계정"→ 다음 → "로컬 컴퓨터 ..."→ 완료 → 확인

개인 상점에서 인증서 내보내기

왼쪽 열에서 "인증서 (로컬 컴퓨터) / 개인 / 인증서"를 선택하십시오.
새로 만든 인증서를 찾으십시오 (Win 10에서 "친숙한 이름"열이 도움이 될 수 있습니다).
이 인증서를 마우스 오른쪽 버튼으로 클릭 → 모든 작업 → 내보내기 ... → 다음 → "아니요, 개인 키를 내 보내지 마십시오"→ 다음 → "DER 인코딩 ..."→ 다음 → 파일 이름을 입력하고 저장하십시오.

힌트 : PFX 파일 형식을 의도적으로 사용하지 않습니다. 개인 키가 내보내기 파일에 포함되며 일반적으로 개인 키가 어디로도 이동하지 않도록하십시오!

인증서를 신뢰할 수있는 루트 CA 저장소로 가져 오기

왼쪽 열에서 "인증서 (로컬 컴퓨터) / 신뢰할 수있는 루트 CA / 인증서"를 마우스 오른쪽 단추로 클릭하고 → 모든 작업 → 가져 오기 ... → 다음 → 방금 내 보낸 파일을 선택하십시오 → 다음 → "다음 저장소에 모든 인증서를 배치하십시오. 신뢰할 수있는 루트 CA "→ 다음 → 완료.

ISS에서 사용

이제 IIS 관리자로 이동하여 로컬 웹 사이트의 바인딩을 선택하고 → 추가 → https → 양식의 호스트 이름을 입력 한 후 myname.dev.local(인증서 만 유효 *.dev.local) 새 인증서 → 확인을 선택하십시오.

호스트에 추가

또한 호스트 이름을 C : \ Windows \ System32 \ drivers \ etc \ hosts에 추가하십시오.

127.0.0.1  myname.dev.local

행복

이제 Chrome과 IE는 인증서를 신뢰할 수있는 것으로 취급하고 열 때 웹 사이트를로드합니다 https://myname.dev.local.

Firefox는 자체 인증서 저장소를 유지 관리합니다. 여기에 인증서를 추가하려면 웹 사이트를 FF로 열고 FF가 인증서에 대해 경고 할 때 예외에 추가해야합니다.

Edge 브라우저의 경우 추가 조치가 필요할 수 있습니다 (아래 참조).

인증서 테스트

인증서를 테스트하려면 Firefox가 최선의 선택입니다. (저는 Chrome 팬 보이지만이 경우에는 FF가 더 좋습니다.)

이유는 다음과 같습니다.

  • Firefox는 자체 재시동시 제거되는 자체 SSL 캐시를 사용합니다. 따라서 로컬 웹 사이트의 인증서를 변경하면 FF의 경고에 즉시 반영되지만 다른 브라우저는 다시 시작하거나 Windows SSL 캐시를 수동으로 제거해야 할 수도 있습니다.
  • 또한 FF는 인증서의 유효성을 확인하기위한 유용한 힌트를 제공합니다. FF가 인증서 경고를 표시하면 고급을 클릭하십시오. FF는 텍스트 블록의 중앙 라인에 하나 이상의 경고가있는 짧은 텍스트 블록을 표시합니다.

자체 서명 된 인증서이므로 신뢰할 수 없습니다.

이 경고는 정확합니다! 위에서 언급했듯이 Firefox는 Windows 인증서 저장소를 사용하지 않으며 예외를 추가 한 경우에만이 인증서를 신뢰합니다. 이를 수행하는 버튼은 경고 바로 아래에 있습니다.

인증서가 이름에 유효하지 않습니다 ...

이 경고는 당신이 잘못한 것을 보여줍니다. 인증서의 (와일드 카드) 도메인이 웹 사이트 도메인과 일치하지 않습니다. 웹 사이트의 (하위) 도메인을 변경하거나 일치하는 새 인증서를 발행하여 문제를 해결해야합니다. 실제로 인증서가 일치하지 않더라도 FF에 예외를 추가 할 수는 있지만 Chrome에서 이러한 조합으로 녹색 자물쇠 기호를 얻지 못합니다.

Firefox는 만료 된 인증서, 오래된 서명 알고리즘이있는 인증서 등과 같이 이곳에서 많은 훌륭하고 이해하기 쉬운 인증서 경고를 표시 할 수 있습니다. 문제를 해결할 수있는 피드백을 제공하는 다른 브라우저는 없었습니다.

어떤 (하위) 도메인 패턴을 개발하기로 선택해야합니까?

위의 New-SelfSignedCertificate 명령에서 와일드 카드 도메인을 사용했습니다 *.dev.local.

당신은 생각할 수 있습니다 : 왜 사용하지 *.local않습니까?

간단한 이유 : 와일드 카드 도메인으로 불법입니다.
와일드 카드 인증서 최소한 두 번째 수준 도메인 이름을 포함 해야 합니다.

따라서 도메인 형태 *.local는 HTTP 웹 사이트를 개발하기에 좋습니다. 그러나 시작하는 새 프로젝트마다 새로운 일치 인증서를 발급해야하므로 HTTPS에는 그다지 많지 않습니다.

중요한 추가 사항 :

  • 유효한 호스트 도메인에는 문자 z, 숫자, 하이픈 및 점만 포함 할 수 있습니다. 밑줄은 허용되지 않습니다! 일부 브라우저는 실제로이 세부 사항에 대해 까다롭기 때문에 도메인 motör_head.dev.local을 와일드 카드 패턴에 완고 히 거부하는 데 어려움을 겪을 수 있습니다 *.dev.local. 로 전환하면 준수합니다 motoer-head.dev.local.
  • 인증서의 와일드 카드는 도메인의 ONE 레이블 (= 두 점 사이의 섹션) 과만 일치합니다. *.dev.local일치 myname.dev.local하지만 NOT other.myname.dev.local!
  • *.*.dev.local인증서에서는 다중 수준 와일드 카드 ( )를 사용할 수 없습니다. 따라서 other.myname.dev.local형식의 와일드 카드 만 사용할 수 있습니다 *.myname.dev.local. 따라서 4 단계 도메인 부분을 사용하지 않는 것이 가장 좋습니다. 모든 변형을 세 번째 수준 부분에 넣으십시오. 이렇게하면 모든 개발 사이트에 대한 단일 인증서를 얻을 수 있습니다.

Edge의 문제

이 자체 서명 된 인증서에 대해 정말 아니지만, 여전히 전체 프로세스에 관련된 :
위의 단계를 수행 한 다음 가장자리가 표시되지 않을 수 있는 당신이 열 때 내용 myname.dev.local.
그 이유는 "네트워크 격리"라고하는 최신 앱용 Windows 10 네트워크 관리의 특징입니다.

이 문제를 해결하려면 관리자 권한으로 명령 프롬프트를 열고 다음 명령을 한 번 입력하십시오.

CheckNetIsolation LoopbackExempt -a -n=Microsoft.MicrosoftEdge_8wekyb3d8bbwe

에지 및 네트워크 격리에 대한 자세한 내용은 여기 ( https://blogs.msdn.microsoft.com/msgulfcommunity/2015/07/01/how-to-debug-localhost-on-microsoft-edge/)를 참조 하십시오.


IIS 8에서 호스팅되는 프로젝트에 SSL을 활성화하고 싶을 때도 같은 문제가 발생했습니다. 마지막으로 makecert 명령을 사용 하여 며칠 동안 사용한 도구는 OpenSSL 이었습니다. IIS 7 및 8.

OS 및 구성 파일 과 호환 되는 OpenSSL을 다운로드 하십시오. 구성 파일을 OpenSSL의 기본 구성으로 설정하십시오.

먼저 인증 기관 (CA)의 개인 키와 인증서를 생성합니다. 이 인증서는 인증서 요청 (CSR)에 서명하는 것입니다.

이 프로세스에 필요한 모든 필드를 완료해야합니다.

  1. openssl req -new -x509 -days 3650 -extensions v3_ca -keyout root-cakey.pem -out root-cacert.pem -newkey rsa:4096

다음과 같은 기본 설정으로 구성 파일을 작성할 수 있습니다. 이제 인증 요청서로 전송되는 파일 인 인증서 요청을 생성합니다.

공용 이름은 사이트의 도메인 (예 : public.organization.com) 으로 설정해야합니다 .

  1. openssl req -new -nodes -out server-csr.pem -keyout server-key.pem -newkey rsa:4096

이제 인증서 요청이 생성 된 CA 인증서로 서명됩니다.

  1. openssl x509 -req -days 365 -CA root-cacert.pem -CAkey root-cakey.pem -CAcreateserial -in server-csr.pem -out server-cert.pem

생성 된 인증서는 IIS로 가져올 수있는 .pfx 파일로 내 보내야합니다.

  1. openssl pkcs12 -export -out server-cert.pfx -inkey server-key.pem -in server-cert.pem -certfile root-cacert.pem -name "Self Signed Server Certificate"

이 단계에서는 인증서 CA를 가져옵니다.

  1. IIS에서 인증서를 가져올 수 있으려면 서버에서 CA 인증서를 신뢰할 수있는 루트 인증 기관으로 가져와야합니다. IIS로 가져올 인증서는 CA의 인증서로 서명되었습니다.

    • 명령 프롬프트를 열고 mmc를 입력하십시오 .
    • 파일을 클릭하십시오 .
    • 스냅인 추가 / 제거 ...를 선택 하십시오 .
    • 인증서를 두 번 클릭하십시오 .
    • 컴퓨터 계정다음->을 선택하십시오 .
    • 로컬 컴퓨터를 선택 하고 완료를 클릭하십시오 .
    • 좋아 .
    • 이동 인증서 -> 신뢰할 수있는 루트 인증 기관 -> 인증서 , rigth에 클릭 인증서 선택 모든 작업 -> 가져 오기 ...

여기에 이미지 설명을 입력하십시오

  • 다음 -> 찾아보기 ...를 선택하십시오 .
  • root-cacert.pem 파일 의 위치를 ​​찾아 보려면 모든 파일선택해야 합니다.
  • 다음을 클릭 하고 다음 저장소에 모든 인증서 배치를 선택하십시오 . 신뢰할 수있는 루트 인증 기관 .
  • 다음마침을 클릭하십시오 .

여기에 이미지 설명을 입력하십시오

이 단계를 통해 IIS는 인증서의 신뢰성을 신뢰합니다.

  1. 마지막 단계에서 인증서를 IIS로 가져오고 바인딩 사이트를 추가합니다.

    • 오픈 인터넷 정보 서비스 (IIS) 관리자 또는 입력 inetmgr을 명령 프롬프트와 이동 서버 인증서 .
    • 가져 오기 ...를 클릭하십시오 .
    • .pfx 파일의 경로, 비밀번호 문구 및 웹 호스팅의 인증서 저장소 선택을 설정하십시오 .

여기에 이미지 설명을 입력하십시오

  • 확인을 클릭하십시오 .
  • 이제 IIS 관리자에서 사이트로 이동하여 바인딩을 ... 그리고 추가 새로운 바인딩을.

  • 바인딩 유형으로 https를 선택하면 가져온 인증서를 볼 수 있습니다.

  • 확인을 클릭하면 모든 작업이 완료됩니다.

여기에 이미지 설명을 입력하십시오


다른 옵션은 웹 사이트 당 도메인 이름을 지정할 수있는 자체 서명 인증서를 작성하는 것입니다. 즉, 여러 도메인 이름에서 사용할 수 있습니다.

IIS 관리자에서

  1. 머신 이름 노드를 클릭하십시오.
  2. 개방형 서버 인증서
  3. 작업 패널에서 '자체 서명 된 인증서 만들기'를 선택하십시오.
  4. '친숙한 이름 지정 ...'에서 이름을 * Dev (유형 목록에서 '개인'선택)
  5. 저장

이제 IIS의 웹 사이트에서 ...

  1. 바인딩 관리
  2. Https에 대한 새로운 바인딩 만들기
  3. 목록에서 자체 서명 된 인증서를 선택하십시오.
  4. 선택하면 도메인 이름 상자가 활성화되고 도메인 이름을 입력 할 수 있습니다.

여기에 이미지 설명을 입력하십시오


자체 서명 된 인증서를 생성하는 또 다른 쉬운 방법은 Jexus Manager를 사용하는 것입니다.

Jexus 관리자

  1. 연결 패널에서 서버 노드를 선택하십시오.
  2. 가운데 패널에서 서버 인증서 아이콘을 클릭하여 관리 페이지를여십시오.
  3. 작업 패널에서 "자체 서명 인증서 생성 ..."메뉴 항목을 클릭하십시오.

https://www.jexusmanager.com/en/latest/tutorials/self-signed.html

참고 URL : https://stackoverflow.com/questions/19441155/how-to-create-a-self-signed-certificate-for-a-domain-name-for-development

반응형