[iis] 개발을 위해 도메인 이름에 대한 자체 서명 된 인증서를 만드는 방법은 무엇입니까?

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

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

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



답변

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. Actions 아래 오른쪽에서 Bindings를 선택합니다.
  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

대안은 아래의 이전 Windows 버전에 대한 방법을 사용하는 것입니다. 그러면 인증서 생성을 위해 Win 10의 모든 기능을 사용할 수 있습니다.

이전 Windows 버전 :

이전 Windows 버전에 대한 권장 사항은 Win 10 컴퓨터에서 인증서를 만들고 mmc 인스턴스 (아래의 “인증서 신뢰”참조)를 사용하여 .PFX 파일로 내 보낸 다음 대상 컴퓨터의 인증서 저장소로 가져 오는 것입니다. 오래된 Windows OS. 인증서를 가져 오려면 마우스 오른쪽 버튼으로 클릭하지 마십시오. 상황에 맞는 메뉴에 “인증서 가져 오기”항목이 있지만 Win Server 2008에서 사용하기위한 모든 시도가 실패했습니다. 대신 대상 컴퓨터에서 다른 mmc 인스턴스를 열고 “인증서 (로컬 컴퓨터) / 개인 / 인증서”로 이동하십시오. , 중간 창을 마우스 오른쪽 버튼으로 클릭하고 모든 작업 → 가져 오기를 선택합니다.

결과 인증서

위의 두 명령 모두 도메인 localhost*.dev.local.
Win10 버전은 추가로 15 년의 라이브 타임과 “Dev Cert * .dev.local, dev.local, localhost”라는 읽을 수있는 표시 이름을 가지고 있습니다.

업데이트 : 매개 변수에 여러 호스트 이름 항목을 제공하면 -DnsName(위에 표시된대로) 이러한 항목 중 첫 번째 항목이 도메인의 제목 (일명 공통 이름)이됩니다. 모든 호스트 이름 항목의 전체 목록은 인증서의 SAN (주체 대체 이름) 필드에 저장됩니다. (이를 지적 해 주신 @BenSewards에게 감사드립니다.)

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

인증서 신뢰

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

mmc.exe를 열고 파일 → 스냅인 추가 / 제거 → 왼쪽 열에서 “인증서”선택 → 추가 → “컴퓨터 계정”선택 → 다음 → “로컬 컴퓨터 …”→ 마침 → 확인

왼쪽 열에서 “인증서 (로컬 컴퓨터) / 개인 / 인증서”를 선택합니다.
새로 생성 된 인증서를 찾습니다 (Win 10에서는 “Friendly name”열이 도움이 될 수 있음).
이 인증서를 선택하고 Ctrl-C를 눌러 클립 보드에 복사합니다.

왼쪽 열에서 “인증서 (로컬 컴퓨터) / 신뢰할 수있는 루트 CA / 인증서”를 선택합니다.
Ctrl-V를 눌러 인증서를이 저장소에 붙여 넣으십시오.
인증서는 신뢰할 수있는 루트 인증 기관 목록에 나타나야하며 이제 신뢰할 수있는 것으로 간주됩니다.

IIS에서 사용

이제 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않습니까?

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

따라서 양식의 도메인은 *.localHTTP 웹 사이트를 개발하는 데 좋습니다. 하지만 HTTPS의 경우는 그다지 많지 않습니다. 시작하는 새 프로젝트마다 새 일치 인증서를 발급해야하기 때문입니다.

중요한 추가 정보 :

  • 유효한 호스트 도메인은 z, 숫자, 하이픈 및 점으로 이루어진 문자 만 포함 할 수 있습니다. 밑줄은 허용되지 않습니다! 일부 브라우저는이 세부 사항에 대해 정말 까다 롭고 도메인 motör_head.dev.local을 와일드 카드 패턴 과 일치시키는 것을 고집스럽게 거부 할 때 어려움을 줄 수 있습니다 *.dev.local. 로 전환 할 때 준수합니다 motoer-head.dev.local.
  • 인증서의 와일드 카드는 도메인에서 하나의 레이블 (= 두 점 사이의 섹션) 과만 일치하며 그 이상은 일치하지 않습니다. *.dev.local 일치 myname.dev.local 하지만 아닙니다 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

Edge 및 네트워크 격리에 대한 자세한 정보는 https://blogs.msdn.microsoft.com/msgulfcommunity/2015/07/01/how-to-debug-localhost-on-microsoft-edge/ 에서 찾을 수 있습니다.


답변

IIS 8에서 호스팅되는 프로젝트에 SSL을 활성화하려고 할 때 동일한 문제가 발생했습니다. 마지막으로 사용한 도구는 OpenSSL 이었습니다. 며칠 후 makecert 명령 과 싸우고 있습니다. 인증서는 데비안에서 생성되지만 다음으로 원활하게 가져올 수 있습니다. 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