개발을 위해 도메인 이름에 대한 자체 서명 인증서를 작성하는 방법은 무엇입니까?
나는이 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-SelfSignedCertificate
cmdlet을 사용하여 자체 서명 된 인증서를 만들 수 있습니다 .
예 :
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 관리자 사용
- IIS 관리자 시작
- 서버 레벨의 IIS에서 서버 인증서를 선택하십시오.
- 작업 아래의 오른쪽에서 자체 서명 된 인증서 만들기를 선택하십시오.
- "인증서의 이름을 지정하십시오"라고 표시되면 적절한 이름으로 참조하십시오.
- 예 :
www.domain.com
또는subdomain.domain.com
- 예 :
- 그런 다음 왼쪽의 목록에서 웹 사이트를 선택하십시오.
- 작업 아래의 오른쪽에서 바인딩을 선택하십시오.
- 새 HTTPS 바인딩을 추가하고 방금 생성 한 인증서를 선택하십시오 (인증서가 와일드 카드 인증서 인 경우 호스트 이름을 지정해야합니다)
- 확인을 클릭하여 테스트하십시오.
특정 도메인에 대한 새 인증서를 만들려면
관리자로 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
하지만 NOTother.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)에 서명하는 것입니다.
이 프로세스에 필요한 모든 필드를 완료해야합니다.
openssl req -new -x509 -days 3650 -extensions v3_ca -keyout root-cakey.pem -out root-cacert.pem -newkey rsa:4096
다음과 같은 기본 설정으로 구성 파일을 작성할 수 있습니다. 이제 인증 요청서로 전송되는 파일 인 인증서 요청을 생성합니다.
공용 이름은 사이트의 도메인 (예 : public.organization.com) 으로 설정해야합니다 .
openssl req -new -nodes -out server-csr.pem -keyout server-key.pem -newkey rsa:4096
이제 인증서 요청이 생성 된 CA 인증서로 서명됩니다.
openssl x509 -req -days 365 -CA root-cacert.pem -CAkey root-cakey.pem -CAcreateserial -in server-csr.pem -out server-cert.pem
생성 된 인증서는 IIS로 가져올 수있는 .pfx 파일로 내 보내야합니다.
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를 가져옵니다.
IIS에서 인증서를 가져올 수 있으려면 서버에서 CA 인증서를 신뢰할 수있는 루트 인증 기관으로 가져와야합니다. IIS로 가져올 인증서는 CA의 인증서로 서명되었습니다.
- 명령 프롬프트를 열고 mmc를 입력하십시오 .
- 파일을 클릭하십시오 .
- 스냅인 추가 / 제거 ...를 선택 하십시오 .
- 인증서를 두 번 클릭하십시오 .
- 컴퓨터 계정 및 다음->을 선택하십시오 .
- 로컬 컴퓨터를 선택 하고 완료를 클릭하십시오 .
- 좋아 .
- 이동 인증서 -> 신뢰할 수있는 루트 인증 기관 -> 인증서 , rigth에 클릭 인증서 선택 모든 작업 -> 가져 오기 ...
- 다음 -> 찾아보기 ...를 선택하십시오 .
- root-cacert.pem 파일 의 위치를 찾아 보려면 모든 파일 을 선택해야 합니다.
- 다음을 클릭 하고 다음 저장소에 모든 인증서 배치를 선택하십시오 . 신뢰할 수있는 루트 인증 기관 .
- 다음 과 마침을 클릭하십시오 .
이 단계를 통해 IIS는 인증서의 신뢰성을 신뢰합니다.
마지막 단계에서 인증서를 IIS로 가져오고 바인딩 사이트를 추가합니다.
- 오픈 인터넷 정보 서비스 (IIS) 관리자 또는 입력 inetmgr을 명령 프롬프트와 이동 서버 인증서 .
- 가져 오기 ...를 클릭하십시오 .
- .pfx 파일의 경로, 비밀번호 문구 및 웹 호스팅의 인증서 저장소 선택을 설정하십시오 .
- 확인을 클릭하십시오 .
이제 IIS 관리자에서 사이트로 이동하여 바인딩을 ... 그리고 추가 새로운 바인딩을.
바인딩 유형으로 https를 선택하면 가져온 인증서를 볼 수 있습니다.
- 확인을 클릭하면 모든 작업이 완료됩니다.
다른 옵션은 웹 사이트 당 도메인 이름을 지정할 수있는 자체 서명 인증서를 작성하는 것입니다. 즉, 여러 도메인 이름에서 사용할 수 있습니다.
IIS 관리자에서
- 머신 이름 노드를 클릭하십시오.
- 개방형 서버 인증서
- 작업 패널에서 '자체 서명 된 인증서 만들기'를 선택하십시오.
- '친숙한 이름 지정 ...'에서 이름을 * Dev (유형 목록에서 '개인'선택)
- 저장
이제 IIS의 웹 사이트에서 ...
- 바인딩 관리
- Https에 대한 새로운 바인딩 만들기
- 목록에서 자체 서명 된 인증서를 선택하십시오.
- 선택하면 도메인 이름 상자가 활성화되고 도메인 이름을 입력 할 수 있습니다.
자체 서명 된 인증서를 생성하는 또 다른 쉬운 방법은 Jexus Manager를 사용하는 것입니다.
- 연결 패널에서 서버 노드를 선택하십시오.
- 가운데 패널에서 서버 인증서 아이콘을 클릭하여 관리 페이지를여십시오.
- 작업 패널에서 "자체 서명 인증서 생성 ..."메뉴 항목을 클릭하십시오.
https://www.jexusmanager.com/en/latest/tutorials/self-signed.html
'program story' 카테고리의 다른 글
Jenkins Git 플러그인 : 특정 태그를 작성하는 방법? (0) | 2020.07.24 |
---|---|
Homebrew 오류에서 설치 (0) | 2020.07.24 |
Visual Studio 프로젝트의 종속성 그래프 (0) | 2020.07.24 |
INSTALL_FAILED_USER_RESTRICTED : Redmi 4 장치를 사용하는 Android 스튜디오 (0) | 2020.07.24 |
Ctrl + C를 사용하여 파이썬 중지 (0) | 2020.07.24 |