nodejs - 인증서 체인에서 자체 서명된 인증서 오류
클라이언트 측 https 요청에 문제가 있습니다.
토막글은 다음과 같습니다.
var fs = require('fs');
var https = require('https');
var options = {
hostname: 'someHostName.com',
port: 443,
path: '/path',
method: 'GET',
key: fs.readFileSync('key.key'),
cert: fs.readFileSync('certificate.crt')
}
var requestGet = https.request(options, function(res){
console.log('resObj', res);
}
오류: 인증서 체인의 자체 서명 인증서입니다.
제가 포스트맨을 사용할 때 고객 인증서와 키를 가져와 문제없이 사용할 수 있습니다.사용 가능한 해결책이 있습니까?저는 우체부가 어떻게 자격증을 처리하고 일하는지에 대해서도 좀 알려주고 싶습니다.
옵션 1: 경고 비활성화(dev에 유용)
질문하신 내용을 보니 SSL 통신을 위해 자체 서명된 인증서를 사용하고 계시기 때문에 개발 중이신 것 같습니다.
그렇다면 노드를 실행 중인 곳에 환경 변수로 추가합니다.
export NODE_TLS_REJECT_UNAUTHORIZED='0'
node app.js
또는 노드를 직접 실행합니다.
NODE_TLS_REJECT_UNAUTHORIZED='0' node app.js
신뢰할 수 없는 인증서(신뢰할 수 없는 = 인증 기관에서 확인할 수 없음)를 허용하도록 노드에 지시합니다.
환경 변수를 설정하지 않거나 여러 응용 프로그램에 대해 이 작업을 수행해야 하는 경우 npm은strict-ssl
설정한 구성false
npm config set strict-ssl=false
옵션 2: 우체부와 같이 CA 인증서 로드(TLS로 테스트하는 데 유용)
@kDoyle이 언급한 포스터와 같은 CA 인증서가 이미 있는 경우 각 요청에서 구성할 수 있습니다(@nic ferrier 감사합니다).
let opts = {
method: 'GET',
hostname: "localhost",
port: listener.address().port,
path: '/',
ca: fs.readFileSync("cacert.pem")
};
https.request(opts, (response) => { }).end();
옵션 3: 신뢰할 수 있는 소스의 적절한 SSL 인증서 사용(생산에 유용)
letsencrypt.org 은 무료이며 설정이 쉽고 키를 자동으로 회전시킬 수 있습니다.https://letsencrypt.org/docs/
다음을 사용하여 이 문제를 해결할 수 있습니다.NODE_TLS_REJECT_UNAUTHORIZED=0
JS 파일에 다음 행을 삽입하거나 단말기에 입력합니다.
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
이것은 해킹이므로 생산에 사용되지 않도록 주의하시기 바랍니다.
window를 사용하는 경우 명령 프롬프트에서 다음 명령을 실행합니다.
set NODE_TLS_REJECT_UNAUTHORIZED=0
그 다음에.npm install <my-package>
효과가 있을 겁니다
이메일러가 없는 경우
덧셈
tls: {
rejectUnauthorized: false
}
내 문제를 해결했습니다.
전체적인 코드는 다음과 같습니다.
nodemailer.createTransport({
host: process.env.MAIL_SERVER,
secure: false,
port: 587,
auth: {
user: process.env.MAIL_USERNAME,
pass: process.env.MAIL_PASSWORD
},
tls: {
rejectUnauthorized: false
}
}
명령어를 작성할 수 있습니다.npm config set strict-ssl false
코드의 시작에 이 행을 추가하면 됩니다.
process.env.NODE_TLS_REJECT_UNAUTHORIZED='0'
그리고 모든 것이 해결되었지만 어떤 경우에도 권장할 수 없는 문제입니다. 저는 해결책을 조사하고 있습니다.https://letsencrypt.org/
검증을 끄는 것은 상당히 위험한 일입니다.인증서를 확인하는 것이 훨씬 좋습니다.
를 사용하여 Certificate Authority 인증서를 요청으로 끌어 올 수 있습니다.ca
options 개체의 키는 다음과 같습니다.
let opts = {
method: 'GET',
hostname: "localhost",
port: listener.address().port,
path: '/',
ca: await fs.promises.readFile("cacert.pem")
};
https.request(opts, (response) => { }).end();
SSL 테스트를 구성하는 방법을 확인할 수 있도록 전체 데모를 작성했습니다.
여기 있습니다.
노드 응용 프로그램은 기존 CA(Mozilla) 인증서에 CA 인증서를 추가해야 합니다.
서비스를 이용하여 노드를 시작하고 환경변수인 NODE_EXTRA_CA_CERTS를 추가합니다.
[Service]
Restart=always
User=<...>
Group=<...>
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
Environment=NODE_EXTRA_CA_CERTS=/<...>/.ssl/extra_certs.pem
WorkingDirectory=/<...>
ExecStart=/usr/bin/node -r dotenv/config /<.....>/server.js dotenv_config_path=/<....>/.env
이렇게 하면 동일한 애플리케이션을 사용하여 인기 있는 CA 또는 자체 서명된 인증서를 사용하여 서비스를 호출할 수 있으며 SSL 확인을 끌 필요가 없습니다.
리눅스에서 인증서를 쉽게 얻을 수 있는 방법은 다음과 같습니다.cURL과 함께 자체 서명된 인증서를 사용하시겠습니까?
다음을 사용하여 인증서를 만듭니다.
$ echo quit | openssl s_client -showcerts -servername server -connect server:443 > cacert.pem
그런 다음 .pem 파일을 extra_cert.pem으로 복사합니다.펨 파일은 하나만 가질 수 있지만 여러 개의 펨 파일을 하나의 파일에 추가할 수 있습니다.
누군가에게 도움이 됐으면 좋겠어요, 이 작품을 만들기 위해 다른 부분을 찾는 데 시간이 좀 걸렸습니다.
수행:
독립 실행형 목적으로 노드 스크립트를 실행하는 경우 이를 사용하는 것이 좋습니다.
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
하지 않음:
모든 기본 요청 프로세스를 변경하는 대신.
npm config set strict-ssl=false
즉, 노드 구성을 변경하지 마십시오. 그렇지 않으면 기본 구성으로 만들어 모든 요청에 적용됩니다.그러니 필요한 곳에 사용하세요.
하루 반나절 동안 이 문제를 추적해 본 결과 IT 부서에서 사용하지 않도록 설정해야 하는 회사 방화벽 설정으로 인해 오류가 발생한 것으로 드러났습니다.인터넷 어디에도 이 문제를 해결할 수 있는 어떤 것도 없었습니다.
process.env['Node_TLS_REJECT_UNANCERTIFED'] = 0; 비록 작동하지는 않지만...
사이프레스를 설치할 수 없음:
SC:\Cypress> export NODE_TLS_REECT_UNANCERICT='0' node app.js export : 'export'라는 용어가 cmdlet, 함수, 스크립트 파일 또는 작동 가능한 프로그램의 이름으로 인식되지 않습니다.이름의 철자를 확인하거나 경로가 포함되어 있는 경우,
경로가 올바른지 확인하고 다시 시도합니다.라인:1 char:1
- NODE_TLS_REJECT_UNARTHED='0' node app.js 내보내기
-
+ CategoryInfo : ObjectNotFound: (export:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException
언급URL : https://stackoverflow.com/questions/45088006/nodejs-error-self-signed-certificate-in-certificate-chain
'programing' 카테고리의 다른 글
WooCommerce PayPal 게이트웨이에서 CORB(크로스 오리진 읽기 차단) 오류 가져오기 (0) | 2023.10.26 |
---|---|
단일 레포 내에서 디렉토리당 .gitignore를 추가로 가질 수 있습니까? (0) | 2023.10.21 |
jQuery에서 선택한 태그에 있는 옵션 태그 수 (0) | 2023.10.21 |
그룹별 평균 계산 (0) | 2023.10.21 |
양식에 대한 AJAX 포스트 요청에서 CSRF 토큰을 전달하는 방법은? (0) | 2023.10.21 |