programing

dotnet dev-certs https --trust'를 실행하는 방법은 무엇입니까?

testmans 2023. 6. 9. 21:53
반응형

dotnet dev-certs https --trust'를 실행하는 방법은 무엇입니까?

ASP.NET 신입사원입니다.

환경:

  • 우분투 18.04

  • 비주얼 스튜디오 코드

  • .NET SDK 2.2.105

명령이 실행 중이어서 문제가 발생했습니다.

에서 자습서를 읽고 있었습니다.

https://learn.microsoft.com/ja-jp/aspnet/core/tutorials/razor-pages/razor-pages-start?view=aspnetcore-2.2&tabs=visual-studio-code

다음 명령을 실행했습니다.

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 httpshttps://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에서 테스트됨)

  1. 수동으로 자체 서명된 인증서 생성
  2. 이 확신을 믿으세요.
  3. 응용 프로그램에서 이 인증서를 사용하도록 강제합니다.

상세:

  1. 자체 서명 인증서 수동 생성:

    • 다음 내용을 포함하는 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
  1. 이 인증서 신뢰:

    • 를 localhost.crt 파일에 합니다./usr/local/share/ca-certificates
    • 사하여인신을 사용하여 sudo update-ca-certificates
    • 가 인서가복확인니다합으로 복사되었는지 합니다./etc/ssl/certs/localhost.pem 확인) (변경 사항 포함)
    • CA 파일 옵션이 없는 인증서가 지금 작동하는지 확인합니다.
$ openssl verify localhost.crt 
localhost.crt: OK
  1. 응용 프로그램에서 이 인증서를 사용하도록 강제합니다.

    • 다음 설정으로 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 답변을 살펴본 다음 계속 진행하기 위해 돌아갑니다.

"자세히" 대답을 들어보세요.

  1. 모든 폴더에서 인증서를 만들 수 있으며 앱의 동일한 폴더에 있을 수도 있고 있을 수도 없고 있을 수도 없습니다.
  2. 가지고 가다openssl verify -CAfile localhost.crt localhost.crt옵션 단계가 아닌 필수 단계입니다.도움이 될 겁니다.
  3. 첫 번째 시나리오를 치료하기 위해 이 작업을 수행하는 동안 코드를 다시 컴파일하거나 만지지 마십시오.
  4. 실행하는 경우sudo update-ca-certificates인증된 폴더를 복사해야 하는 폴더에 응답합니다.
  5. 파이의 경우 라즈베리 인증서가 라즈베리 파이의 라즈베리 에 위치합니다./etc/ssl/certs만 아니라/usr/share/ca-certificates/에는 그고어경우는에떤리는./usr/local/share/certificates.
  6. 할 수 있는 를 합니다.sudo update-ca-certificatesif후)▁possible▁▁it'▁itt▁work. (인증서를 하지 않는 경우 한 모든폴더에 합니다.작동하지 않는 경우(인증서를 업데이트하거나 추가하지 않음) 가능한 모든 폴더에 복사합니다.
  7. 인증서를 만들 때 암호를 사용하는 경우에는 에서 암호를 사용해야 합니다.appsettings.json
  8. 다음 오류가 발생할 경우:

Interop+Crypto+OpenSslCryptographicException: 오류:2006D002:BIO 루틴:BIO_new_file:시스템 lib

오류가 "액세스 거부"를 의미한다는 점을 고려하십시오.권한이 없거나 관련이 없기 때문일 수 있습니다.

7b) 파일을 찾을 수 없을 수도 있습니다. 구성의 전체 경로를 사용합니다.

 "Path": "/home/user/www/myfolder1/myapp/localhost.pfx",
  1. 그 후에 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
  1. 그 후에 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 사용자를 위한 해결 방법이 있을 수 있습니다.

크롬의 경우:

  1. 주소 표시줄에서 "비보안"을 누릅니다.
  2. 인증서를 클릭합니다.
  3. 세부 정보를 클릭합니다.
  4. 내보내기를 클릭합니다.

실행: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

반응형