programing

리프 서명을 확인할 수 없습니다.

newstyles 2023. 9. 16. 08:44

리프 서명을 확인할 수 없습니다.

저는 node.js request.js를 사용하여 api에 도달하고 있습니다.이 오류가 발생합니다.

[오류: CANBLE_TO_VERIFIE_LEAF_SIGNATURE]

내 모든 자격증은 정확하고 유효하며 서버는 문제없습니다.저는 집배원에게도 같은 요청을 했습니다.

request({
    "url": domain+"/api/orders/originator/"+id,
    "method": "GET",
    "headers":{
        "X-API-VERSION": 1,
        "X-API-KEY": key
    },
}, function(err, response, body){
    console.log(err);
    console.log(response);
    console.log(body);
});

에서 입니다 ex 는 에서 입니다 는 node ./run_file.js,그 이유는 무엇인가?서버에서 실행해야 합니까?

참고: 다음은 위험하며 클라이언트와 서버 간에 API 컨텐츠를 가로채고 수정할 수 있습니다.

이것 또한 효과가 있었습니다.

process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';

신청서 문제가 아니라 중개인 CA가 서명한 증명서 문제입니다.해당 사실을 인정하고 계속 진행하려면 다음을 추가하여 옵션을 요청합니다.

rejectUnauthorized: false

전체 요청:

request({
    "rejectUnauthorized": false,
    "url": domain+"/api/orders/originator/"+id,
    "method": "GET",
    "headers":{
        "X-API-VERSION": 1,
        "X-API-KEY": key
    },
}, function(err, response, body){
    console.log(err);
    console.log(response);
    console.log(body);
});

안전한 솔루션

보안을 해제하는 대신 필요한 인증서를 체인에 추가할 수 있습니다.npm부터 ssl-root-cas 패키지를 먼저 설치합니다.

npm install ssl-root-cas

이 패키지에는 브라우저는 신뢰하지만 노드는 신뢰하지 않는 많은 중개 인증서가 포함되어 있습니다.

var sslRootCAs = require('ssl-root-cas/latest')
sslRootCAs.inject()

누락된 인증서를 추가합니다.자세한 내용은 여기를 참조하십시오.

https://git.coolaj86.com/coolaj86/ssl-root-cas.js

하며 Cool을 사용하여 과 같이 시키지 않습니다.AJ86의 솔루션은 정확하며 다음을 사용하여 모든 체크를 비활성화하는 것과 같이 보안을 손상시키지 않습니다.rejectUnauthorized아니면NODE_TLS_REJECT_UNAUTHORIZEDCA의 해야 할 수도 . 하지만 CA의 인증서를 명시적으로 추가로 주입해야 할 수도 있습니다.

먼저 ssl-root-cas 모듈에 포함된 루트 CA를 시도했습니다.

require('ssl-root-cas/latest')
  .inject();

난 아직도 결국엔UNABLE_TO_VERIFY_LEAF_SIGNATUREerror. 그 다음 COMODO SSL Analyzer를 통해 내가 접속하고 있는 웹 사이트에 대한 인증서를 누가 발급했는지 알아냈고, 해당 권한의 인증서를 다운로드하여 해당 인증서만 추가하려고 했습니다.

require('ssl-root-cas/latest')
  .addFile(__dirname + '/comodohigh-assurancesecureserverca.crt');

또 오류가했습니다: 가 했습니다 했습니다 가 .CERT_UNTRUSTED마지막으로하고 "포함시켰는데 과 같이 했습니다. 마지막으로 루트 CA를 추가로 주입하고 "my"(분명히 중개자인) CA를 포함시켰는데, 이는 다음과 같이 작동했습니다.

require('ssl-root-cas/latest')
  .inject()
  .addFile(__dirname + '/comodohigh-assurancesecureserverca.crt');

Create React App(이 오류도 발생하고 이 질문이 Google 결과 1위임)의 경우 다음을 사용할 수 있습니다.HTTPS=true npm start그리고.proxy(에서)package.json개발 중인 경우 자체 서명된 일부 HTTPS API로 이동합니다.

를, 를 바꾸는 것을 .proxy다음과 같이:

"proxy": {
  "/api": {
    "target": "https://localhost:5001",
    "secure": false
  }
}

secure는 WebPack 프록시가 인증서 체인을 확인하는지 여부를 결정하고 사용자가 데이터를 얻을 수 있도록 API 자체 서명 인증서가 확인되지 않도록 하는 비활성화를 수행합니다.

하는 것이 매우 유혹적일 수 있습니다.rejectUnauthorized: false아니면process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';하지만 하지 말아요!중간에 공격을 받는 사람에게 노출됩니다.

다른 답변들은 문제가 당신의 증명서가 "중개인 CA에 의해 서명"되었다는 사실에 있다는 점에서 옳습니다.이에 대한 쉬운 해결책이 있습니다. 예를 들어 서드파티 라이브러리를 필요로 하지 않는 것입니다.ssl-root-cas또는 노드에 추가 CA를 주입합니다.

할 수 옵션을 를 합니다 의 는 할 CA 를 에 합니다 를 는 할 UNABLE_TO_VERIFY_LEAF_SIGNATURE. 노드의 내장된 기능을 사용하는 간단한 예는 다음과 같습니다.https모듈.

import https from 'https';

const options = {
  host: '<your host>',
  defaultPort: 443,
  path: '<your path>',
  // assuming the bundle file is co-located with this file
  ca: readFileSync(__dirname + '/<your bundle file>.ca-bundle'),
  headers: {
    'content-type': 'application/json',
  }
};
https.get(options, res => {
  // do whatever you need to do
})

그러나 호스팅 서버에서 SSL 설정을 구성할 수 있다면 가장 좋은 해결책은 호스팅 공급자에 중간 인증서를 추가하는 것입니다.이렇게 하면 클라이언트 요청자는 서버 자체에 CA가 포함되어 있으므로 CA를 지정할 필요가 없습니다.저는 개인적으로 저렴한 이름 + heroku를 사용합니다.게은일다는일다r.hteee . 파일 하나를 만드는 것이었습니다.cat yourcertificate.crt bundle.ca-bundle > server.crt이 첫번째 했습니다. 그런 다음 이 파일을 열고 첫 번째 인증서 뒤에 줄을 새로 추가했습니다.다음에서 더 많이 읽을 수 있습니다.

https://www.namecheap.com/support/knowledgebase/article.aspx/10050/33/installing-an-ssl-certificate-on-heroku-ssl

엄격하게 설정하여 시도할 수도 있습니다.SSL 대상false과 같이 과 과:

{  
   url: "https://...",
   method: "POST",
   headers: {
        "Content-Type": "application/json"},
   strictSSL: false
}

저도 같은 문제가 있었습니다.@ThomasReggi 와 @Cool 을 팔로우 했습니다.AJ86 솔루션으로 잘 작동했는데 솔루션이 만족스럽지 못합니다.

왜냐하면 "UNABLE"TO_VERIFIE_LEAF_인증 구성 수준으로 인해 SIGNATURE" 문제가 발생했습니다.

@thirdender 솔루션은 인정하지만 부분적인 솔루션입니다.nginx 공식 웹사이트에 따르면, 그들은 인증서가 서버 인증서와 체인 인증서의 조합이어야 한다고 분명히 언급했습니다.

enter image description here

누군가에게 도움이 될까봐 이걸 여기에 놓는 것뿐인데, 제 경우는 달랐고 좀 이상한 조합이었습니다.슈퍼에이전트를 통해 액세스한 요청에 따라 이를 받고 있었습니다. 문제는 인증서(적절하게 설정된)와 아무 관련이 없으며 모든 것이 비동기 모듈의 워터폴 콜백을 통해 슈퍼에이전트 결과를 전달하고 있다는 사실과 관련이 있습니다.수정 방법: 전체 결과를 전달하는 대신 전달만 하면 됩니다.result.body폭포의 콜백을 통해서요

다음 명령이 내게 효과적이었습니다.

> npm config set strict-ssl false
> npm cache clean --force

문제는 저장소에서 잘못되었거나 신뢰할 수 없는 SSL[Secure Sockets Layer] 인증서를 가진 모듈을 설치하려고 한다는 것입니다.캐시를 정리하면 이 문제가 해결됩니다.나중에 사실로 바꿔야 할 수도 있습니다.

이를 안전하게 해결하기 위한 또 다른 방법은 다음 모듈을 사용하는 것입니다.

node_certs_certs_node_certs_certs_node_certs

이 모듈은 Mozilla에서 신뢰하는 모든 루트 및 중간 인증서를 포함하는 PEM 파일을 생성하여 코드 수정 없이 작동할 수 있습니다.다음 환경 변수를 사용할 수 있습니다(Nodejs v7.3+와 함께 작동).

NODE_EXTRA_CA_CERTS

위 환경 변수와 함께 사용할 PEM 파일을 생성합니다.다음을 사용하여 모듈을 설치할 수 있습니다.

npm install --save node_extra_ca_certs_mozilla_bundle

그런 다음 환경 변수를 사용하여 노드 스크립트를 시작합니다.

NODE_EXTRA_CA_CERTS=node_modules/node_extra_ca_certs_mozilla_bundle/ca_bundle/ca_intermediate_root_bundle.pem node your_script.js

생성된 PEM 파일을 사용하는 다른 방법은 다음 사이트에서 사용할 수 있습니다.

https://github.com/arvind-agarwal/node_extra_ca_certs_mozilla_bundle

참고: 위 모듈의 작성자입니다.

안녕하세요 제 경우에는 이 주제에 대한 작은 추가 사항입니다.

require('ssl-root-cas/latest')
  .inject()
  .addFile(__dirname + '/comodohigh-assurancesecureserverca.crt');

저는 해결되지 않았습니다. 파일을 다운로드할 수 없다는 오류가 계속 반환되었습니다. 이 특정 오류를 검색한 지 몇 시간이 지났는데도 이 응답을 접했습니다. https://stackoverflow.com/a/65442604

제 애플리케이션에는 일부 사용자의 보안 요구 사항으로 요청 중 일부를 프록시로 처리할 수 있는 프록시가 있기 때문에 이 문제가 있는 API를 참조하는 경우와 브라우저를 통해 API URL에 액세스할 수 있는 경우 요청을 프록시로 처리할 수 있으며 [Error: CANBLE_]을(를) 수정할 수 있습니다.TO_VERIFIE_LEAF_SIGNATURE] 이슈.

프록시 사용 방법의 예

await axios.get(url, {
  timeout: TIME_OUT,
  headers: {
    'User-Agent': 'My app'
  },
  params: params,
  proxy: {
    protocol: _proxy.protocol,
    host: _proxy.hostname,
    port: _proxy.port,
    auth: {
      username: _proxy_username,
      password: _proxy_password
    }
  }
});

저도 같은 문제가 있었는데 다음과 같은 방법으로 고칠 수 있습니다.

  1. 인증서만 사용하지 말고 풀체인 또는 체인 인증서만 사용하세요.

그게 다야.

하위 도메인에 고대디 인증서를 설치한 후 Apache 구성에 문제가 발생했습니다.원래는 노드에서 SNI(Server Name Indicator)를 보내지 않는 것이 문제가 될 수도 있다고 생각했는데 그렇지 않았습니다.https://www.ssllabs.com/ssltest/ 사용하여 하위 도메인의 SSL 인증서를 분석하면 체인 문제가 반환됩니다. 미완성.

후 된 GoDaddy 한 를 gd_bundle-g2-g1.crt을 경유하여 철하다SSLCertificateChainFileApache Directive, 노드가 HTTPS를 통해 연결할 수 있었고 오류가 사라졌습니다.

/ module을이 postgres / pg 을 하기 에 에 이 보다 이 을 보다 NODE_TLS_REJECT_UNAUTHORIZED아니면rejectUnauthorized하지 않은 연결로 하지 로 로 하지 .

대신 tls.connect의 매개 변수와 일치하도록 "ssl" 옵션을 구성합니다.

{
  ca: fs.readFileSync('/path/to/server-ca.pem').toString(),
  cert: fs.readFileSync('/path/to/client-cert.pem').toString(),
  key: fs.readFileSync('/path/to/client-key.pem').toString(),
  servername: 'my-server-name' // e.g. my-project-id/my-sql-instance-id for Google SQL
}

과 에서 을 하는 이 을 했습니다 을 했습니다 이 과 에서 하는 PGSSLROOTCERT,PGSSLCERT,그리고.PGSSLKEY:

https://github.com/programmarchy/pg-ssl

npm부터 local git shared repo를 설치하려고 하면 같은 오류가 발생할 수 있습니다.npm ERR! code ANBABLE_로 표시됩니다.TO_VERIFIE_LEAF_SIGNATURE(시그니처) 인증서에 문제가 있는 것 같습니다만, 저에게 효과가 있었던 것은 패키지에 있는 공유 레포로 링크를 변경하는 것이었습니다.json 파일: "shared-frontend": "http://myreposerver": "shared-frontend": "git+frontend://myreposerver"

간단히 말해서, 링크에 git+를 추가하는 것만으로 해결되었습니다.

노드가 이 오류를 인쇄할 수 있는 또 다른 이유는 백엔드 연결/서비스가 잘못 구성되어 있기 때문입니다.

불행히도 노드 오류는 확인할 수 없었던 인증서를 알려주지 않습니다 [기능 요청!]

사용자의 서버에는 클라이언트가 연결할 수 있는 완벽한 인증서 체인이 설치되어 있을 수 있으며 브라우저의 URL 표시줄에 멋진 잠금 장치가 표시될 수도 있지만 서버가 잘못 구성된 다른 인증서를 사용하여 백엔드 데이터베이스에 연결하려고 하면 동일한 오류가 발생할 수 있습니다.

얼마 전부터 공급업체 코드에 이 문제가 있었습니다.백엔드 데이터베이스 연결을 자체 서명에서 실제 인증서로 변경하면 해결되었습니다.

서버에 중급 인증서를 포함해야 합니다.[Error: ABLE_]을(를) 해결합니다.TO_VERIFIE_LEAF_SIGNATURE]

언급URL : https://stackoverflow.com/questions/20082893/unable-to-verify-leaf-signature