dotnet dev-certs https --trust'를 실행하는 방법은 무엇입니까?
ASP.NET 신입사원입니다.
환경:
우분투 18.04
비주얼 스튜디오 코드
.NET SDK 2.2.105
명령이 실행 중이어서 문제가 발생했습니다.
에서 자습서를 읽고 있었습니다.
다음 명령을 실행했습니다.
dotnet dev-certs https --trust
https://localhost를 신뢰해야 합니다.하지만 오류 메시지를 발견했습니다.
$ Specify --help for a list of available options and commands.
"dotnet dev-certs https" 명령에 no --trust 옵션이 없는 것 같습니다.이 문제를 해결하는 방법은 무엇입니까?
Ubuntu에서 표준 메커니즘은 다음과 같습니다.
dotnet dev-certs https -v
서명 합니다.- /corefx를 pfx에서 ~/./corefx/coresography/x509store/mypx에pem으로를 사용합니다.
openssl pkcs12 -in <certname>.pfx -nokeys -out localhost.crt -nodes
- 알았다.
localhost.crt
/usr/local/share/ca-certificates
- 사하여인신을 사용하여
sudo update-ca-certificates
- 가 인서가복확인니다합으로 복사되었는지 합니다.
/etc/ssl/certs/localhost.pem
확인) (변경 사항 포함) - 용하여신수확인을 사용하여 수 있는지 합니다.
openssl verify localhost.crt
유감스럽게도 이것은 작동하지 않습니다.
dotnet dev-certs https
는 https://github.com/openssl/openssl/issues/1418 및 https://github.com/dotnet/aspnetcore/issues/7246 에 설명된 문제의 영향을 받는 인증서를 생성합니다.
$ openssl verify localhost.crt
CN = localhost
error 20 at 0 depth lookup: unable to get local issuer certificate
error localhost.crt: verification failed
- 그 때문에 닷넷 클라이언트가 인증서를 신뢰하도록 하는 것은 불가능합니다.
해결 방법: (Opensl 1.1.1c에서 테스트됨)
- 수동으로 자체 서명된 인증서 생성
- 이 확신을 믿으세요.
- 응용 프로그램에서 이 인증서를 사용하도록 강제합니다.
상세:
자체 서명 인증서 수동 생성:
- 다음 내용을 포함하는 localhost.conf 파일을 만듭니다.
[req]
default_bits = 2048
default_keyfile = localhost.key
distinguished_name = req_distinguished_name
req_extensions = req_ext
x509_extensions = v3_ca
[req_distinguished_name]
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_default = localhost
commonName_max = 64
[req_ext]
subjectAltName = @alt_names
[v3_ca]
subjectAltName = @alt_names
basicConstraints = critical, CA:false
keyUsage = keyCertSign, cRLSign, digitalSignature,keyEncipherment
[alt_names]
DNS.1 = localhost
DNS.2 = 127.0.0.1
- 사하여인생을 사용하여 인증서
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout localhost.key -out localhost.crt -config localhost.conf
- pfx를 사용하여 합니다.
openssl pkcs12 -export -out localhost.pfx -inkey localhost.key -in localhost.crt
- 사항) (으)로
openssl verify -CAfile localhost.crt localhost.crt
어느 쪽이 될지도 모르는localhost.crt: OK
- 아직 신뢰할 수 없기 때문에 를 사용하여
openssl verify localhost.crt
에 실패할 것입니다.
CN = localhost
error 18 at 0 depth lookup: self signed certificate
error localhost.crt: verification failed
이 인증서 신뢰:
- 를 localhost.crt 파일에 합니다.
/usr/local/share/ca-certificates
- 사하여인신을 사용하여
sudo update-ca-certificates
- 가 인서가복확인니다합으로 복사되었는지 합니다.
/etc/ssl/certs/localhost.pem
확인) (변경 사항 포함) - CA 파일 옵션이 없는 인증서가 지금 작동하는지 확인합니다.
- 를 localhost.crt 파일에 합니다.
$ openssl verify localhost.crt
localhost.crt: OK
응용 프로그램에서 이 인증서를 사용하도록 강제합니다.
- 다음 설정으로 appsettings.json을 업데이트합니다.
"Kestrel": {
"Certificates": {
"Default": {
"Path": "localhost.pfx",
"Password": ""
}
}
}
@chrsvdb에서 제공하는 답변이 도움이 되지만 모든 문제를 해결하는 것은 아닙니다.저는 여전히 서비스 간 통신(HttpClient - PartialChain 오류)에 문제가 있었고, 또한 당신은 Kestrel을 재구성하여 자신의 인증서를 사용해야 합니다.자체 서명된 인증서를 생성하여 .NET SDK로 가져올 수 있습니다.를 만 하면 됩니다.1.3.6.1.4.1.311.84.1.1
확장이 필요합니다.
그런 다음 인증서를 .NET Core SDK로 가져와서 신뢰할 수 있습니다.리눅스를 신뢰하는 것은 각 응용 프로그램이 자체 인증서 저장소를 가질 수 있기 때문에 약간 어렵습니다.예: 구성 가능한 크롬 및 에지 사용 ssdbcertutil
존 더피가 묘사한 것처럼.안타깝게도 애플리케이션을 스냅으로 설치할 때 nssdb의 위치가 다를 수 있습니다.그러면 각 응용프로그램은 자체 데이터베이스를 가집니다.예: 크롬 스냅의 경우 경로는$HOME/snap/chromium/current/.pki/nssdb
$HOME/snap/postman/current/.pki/nssdb 파일입니다.
따라서 저는 인증서를 생성하고 포스트맨 스냅, 크롬 스냅, 현재 사용자 nssdb 및 시스템 수준에서 이를 신뢰하는 스크립트를 만들었습니다.또한 구성을 변경하지 않고 ASP.NET Core에서 사용할 수 있도록 스크립트를 .NET SDK로 가져옵니다.스크립트에 대한 자세한 내용은 블로그 게시물 https://blog.wille-zone.de/post/aspnetcore-devcert-for-ubuntu 에서 확인할 수 있습니다.
crisvdb 답변 외에도 몇 가지 추가할 정보가 있으며, 이는 워크로드의 계속입니다.나는 이것이 꽤 복잡한 논평이기 때문에 논평하지 않지만, 이 답변 전에 먼저 crisvdb 답변을 살펴본 다음 계속 진행하기 위해 돌아갑니다.
"자세히" 대답을 들어보세요.
- 모든 폴더에서 인증서를 만들 수 있으며 앱의 동일한 폴더에 있을 수도 있고 있을 수도 없고 있을 수도 없습니다.
- 가지고 가다
openssl verify -CAfile localhost.crt localhost.crt
옵션 단계가 아닌 필수 단계입니다.도움이 될 겁니다. - 첫 번째 시나리오를 치료하기 위해 이 작업을 수행하는 동안 코드를 다시 컴파일하거나 만지지 마십시오.
- 실행하는 경우
sudo update-ca-certificates
인증된 폴더를 복사해야 하는 폴더에 응답합니다. - 파이의 경우 라즈베리 인증서가 라즈베리 파이의 라즈베리 에 위치합니다.
/etc/ssl/certs
만 아니라/usr/share/ca-certificates/
에는 그고어경우는에떤리는./usr/local/share/certificates
. - 할 수 있는 를 합니다.
sudo update-ca-certificates
▁if후)▁possible▁▁it'▁itt▁work. (인증서를 하지 않는 경우 한 모든폴더에 합니다.작동하지 않는 경우(인증서를 업데이트하거나 추가하지 않음) 가능한 모든 폴더에 복사합니다. - 인증서를 만들 때 암호를 사용하는 경우에는 에서 암호를 사용해야 합니다.
appsettings.json
- 다음 오류가 발생할 경우:
Interop+Crypto+OpenSslCryptographicException: 오류:2006D002:BIO 루틴:BIO_new_file:시스템 lib
오류가 "액세스 거부"를 의미한다는 점을 고려하십시오.권한이 없거나 관련이 없기 때문일 수 있습니다.
7b) 파일을 찾을 수 없을 수도 있습니다. 구성의 전체 경로를 사용합니다.
"Path": "/home/user/www/myfolder1/myapp/localhost.pfx",
- 그 후에 Apache 또는 Apache2를 사용하는 경우 500 오류가 발생할 수 있습니다.
사이트의 Apache 로그에 다음 오류가 발생하는 경우:
[ssl:error] [remote::1:yourport] AH01961: yoursite.com:443 에 대해 SSL 프록시가 요청되었지만 사용할 수 없도록 설정됨 [Hint:SSL ProxyEngine] [https:error] AH00961: HTTPS: [::1]: 사용자의 포트(로컬 호스트)에 대한 SSL 지원을 사용할 수 없도록 설정하지 못했습니다.
.SSLEngine On
당신의 그고당앞서 에.ProxyPass
SSLProxyEngine on
- 그 후에 Apache 또는 Apache2를 사용하는 경우 500 오류가 발생할 수 있습니다.
사이트의 Apache 로그에 다음 오류가 발생하는 경우:
[proxy:error] [client x.x.x.x:port] AH00898: /[proxy_http:error] [client x.x.x.x:port] AH01097: 패스 요청 본문이 x.x.x.x()에서 [:1]:port(localhost)로 실패했습니다.
.SSLProxyEngine on
당신의 그고당앞서 에.ProxyPass
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
갱신하다
만약 당신이 이것을 개조하고, 같은 이름을 사용한다면, 당신은 그것을 제거해야 한다는 것을 고려해야 합니다.pem
.etc/ssl/certs
UPDATE 2 2
반환되는 경우:
처리되지 않은 예외입니다.Interop+Crypto+OpenSslCryptographicException: 오류:2006D002:BIO 루틴:BIO_new_file:시스템 lib
pfx 파일이 755 사용 권한에 있는지 확인합니다.
한다면appsettings.json
것 모든 수 ). 하십시오. 도트넷이 appsettings.json인 동일한 디렉토리에서 실행되어야 한다는 점을 고려하십시오.
이것은 닷넷 글로벌 도구의 알려진 문제이며 특정 명령은 MacOS 및 Windows에서만 사용할 수 있습니다.github에서 이 문제를 참조하십시오.6066호.
ASP.Net Core 응용 프로그램 서비스는 Ubuntu의 포트 5000만 청취하는 SO 게시물을 기반으로 Linux 사용자를 위한 해결 방법이 있을 수 있습니다.
크롬의 경우:
- 주소 표시줄에서 "비보안"을 누릅니다.
- 인증서를 클릭합니다.
- 세부 정보를 클릭합니다.
- 내보내기를 클릭합니다.
실행:certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n {FILE_NAME} -i {FILE_NAME}
Chrome을 다시 시작합니다.
다음은 닷넷 개발 인증서를 신뢰하는 데 도움이 될 것으로 보입니다: https://blog.wille-zone.de/post/aspnetcore-devcert-for-ubuntu/
그러면 브라우저에서도 인증서가 정상이며 다음 연도에 유효하다는 것을 확인할 수 있습니다.
한 번 해보세요...행운을 빕니다.
언급URL : https://stackoverflow.com/questions/55485511/how-to-run-dotnet-dev-certs-https-trust
'programing' 카테고리의 다른 글
Firebase: 서비스 작업자의 위치 변경 (0) | 2023.06.09 |
---|---|
사례 및 IN을 사용한 업데이트 - Oracle (0) | 2023.06.09 |
Promise.()에 해당하는 작업은 무엇입니까? (0) | 2023.06.09 |
.net MVC RadioButtonFor()를 사용할 때 하나만 선택할 수 있도록 그룹화하는 방법은 무엇입니까? (0) | 2023.06.09 |
로그인한 사용자의 vue 로그인 경로 방문 중지 (0) | 2023.06.09 |