localhost와 함께 사용하기 위해 자체 서명 된 인증서를 만드는 데 대한 다양한 지침을 따르려고 시도하면서 대부분의 지침은 IIS 용으로 보이지만 Nodejs / Express를 사용하려고합니다. 인증서가 설치되는 동안 신뢰할 수 없기 때문에 제대로 작동하지 않습니다. 실패한 시도는 다음과 같습니다.
- localhost에 대한 자체 서명 된 인증서를 만들려면 어떻게해야합니까?
- https://www.digitalocean.com/community/articles/how-to-create-a-ssl-certificate-on-nginx-for-ubuntu-12-04/
- http://blogs.developerforce.com/developer-relations/2011/05/generating-valid-self-signed-certificates.html
- http://www.robbagby.com/iis/self-signed-certificates-on-iis-7-the-easy-way-and-the-most-effective-way/
누군가이 작업을 수행 할 수있는 워크 플로를 제공 할 수 있습니까? 인증서를 설치할 수 있지만 크롬 (v32) 또는 IE (v10)에서 인증서를 신뢰할 수 없습니다.
편집 : 문제가 신뢰할 수있는 cert-root가 아니라는 의견에 제안되었습니다. IE를 통해 인증서를 설치했지만 여전히 신뢰할 수 없습니다.
답변
위의 답변은 부분적이었습니다. 나는이 일을하는 데 너무 많은 시간을 보냈다. 그것은 미쳤다. 내 미래에 대한 참고 사항은 다음과 같습니다.
저는 Windows 10에서 Chrome 65로 작업하고 있습니다. Firefox는 잘 작동합니다. localhost를 보안 예외로 확인하면 작동합니다. Chrome은 다음을 수행하지 않습니다.
1 단계. 백엔드에서라는 폴더를 만듭니다 security
. 우리는 그 안에서 일할 것입니다.
2 단계.req.cnf
다음 콘텐츠로 이름이 지정된 요청 구성 파일을 만듭니다 (크레딧은 @Anshul로 이동 ).
req.cnf :
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = Country initials like US, RO, GE
ST = State
L = Location
O = Organization Name
OU = Organizational Unit
CN = www.localhost.com
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.localhost.com
DNS.2 = localhost.com
DNS.3 = localhost
이 필드에 대한 설명은 여기에 있습니다 .
3 단계 . 터미널의 보안 폴더로 이동하여 다음 명령을 입력합니다.
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout cert.key -out cert.pem -config req.cnf -sha256
4 단계 :security
폴더 외부 에서 익스프레스 앱에서 다음과 같이합니다. (크레딧은 @Diego Mello로 이동)
backend
/security
/server.js
server.js :
const express = require('express')
const app = express()
const https = require('https')
const fs = require('fs')
const port = 3000
app.get('/', (req, res) => {
res.send("IT'S WORKING!")
})
const httpsOptions = {
key: fs.readFileSync('./security/cert.key'),
cert: fs.readFileSync('./security/cert.pem')
}
const server = https.createServer(httpsOptions, app)
.listen(port, () => {
console.log('server running at ' + port)
})
단계 5. 서버를 시작하고 https : // localhost : 3000으로node server.js
이동합니다 . .
이 시점에서 서버 설정이 있습니다. 그러나 브라우저에 경고 메시지가 표시되어야합니다.
자체 서명 된 인증서를 chrome / windows 인증서 저장소에 CA에서 신뢰할 수있는 인증 기관으로 등록해야합니다.(크롬은 이것을 Windows에도 저장합니다.)
6 단계. Chrome에서 Dev Tools를 열고 보안 패널로 이동 한 다음 인증서보기를 클릭합니다.
단계 7. 세부 정보 패널로 이동하여 파일 복사를 클릭 한 다음 인증서 내보내기 마법사가 나타나면 아래와 같이 다음을 클릭합니다.
8 단계. DER 인코딩을 그대로두고 다음을 클릭 한 다음을 선택 Browse
하고 데스크톱과 같이 액세스하기 쉬운 폴더에 넣고 인증서 이름을 지정합니다.localhost.cer, then click Save and then Finish.
. 데스크톱에서 인증서를 볼 수 있어야합니다.
단계 9.chrome://settings/
URL 상자에 삽입하여 엽니 다 . 아래에서을 클릭 Advanced / Advanced Options
한 다음 아래로 스크롤하여을 찾습니다 Manage Certificates
.
10 단계. 신뢰할 수있는 루트 인증 기관 패널로 이동하고 가져 오기를 클릭합니다.
localhost.cer
8 단계에서 방금 내보내기를 마친 인증서 를 가져옵니다 .
단계 11. 찾아보기를 클릭하고을 찾은 localhost.cer
다음 기본값을 그대로두고 다음을 여러 번 클릭합니다.이 경고가 나타날 때까지 예를 클릭합니다.
12 단계. 모든 것을 닫고 Chrome을 다시 시작합니다. 그런 다음 https://localhost:3000
가면 다음이 표시됩니다.
답변
최단 방법.
MacOS에서 테스트되었지만 다른 OS에서도 유사하게 작동 할 수 있습니다.
PEM 생성
> openssl req -x509 -newkey rsa:2048 -keyout keytmp.pem -out cert.pem -days 365
> openssl rsa -in keytmp.pem -out key.pem
귀하의 익스프레스 서버
const express = require('express')
const app = express()
const https = require('https')
const fs = require('fs')
const port = 3000
app.get('/', (req, res) => {
res.send('WORKING!')
})
const httpsOptions = {
key: fs.readFileSync('./key.pem'),
cert: fs.readFileSync('./cert.pem')
}
const server = https.createServer(httpsOptions, app).listen(port, () => {
console.log('server running at ' + port)
})
https://localhost:3000
Chrome에서 열면 안전하지 않다는 것을 알 수 있습니다. 아직!- 개발자 도구> 보안> 인증서보기 : 이미지를 바탕 화면으로 끌어서 두 번 클릭합니다.
- ‘추가’를 클릭하십시오.
- 키 체인 접근에서 찾아 두 번 클릭하십시오.
- ‘신뢰’를 확장하고 ‘이 인증서를 사용할 때’를 ‘항상 신뢰’로 변경합니다.
- 인증하라는 메시지가 표시 될 수 있습니다.
- 서버를 다시 시작하십시오.
- 브라우저를 새로 고칩니다.
- 즐겨! 🙂
답변
openSSL을 사용하여 인증서를 생성 할 수 있습니다. 이것 좀보세요 .
노드 JS 익스프레스 서버에 HTTPS를 추가하려면 .key 및 .crt 파일이 필요합니다. 생성 한 후에는이 코드를 사용하여 HTTPS를 서버에 추가하십시오.
var https = require('https');
var fs = require('fs');
var express = require('express');
var options = {
key: fs.readFileSync('/etc/apache2/ssl/server.key'),
cert: fs.readFileSync('/etc/apache2/ssl/server.crt'),
requestCert: false,
rejectUnauthorized: false
};
var app = express();
var server = https.createServer(options, app).listen(3000, function(){
console.log("server started at port 3000");
});
이것은 내 로컬 컴퓨터와 이것을 배포 한 서버에서 잘 작동합니다. 서버에있는 것은 goDaddy에서 구입했지만 localhost에는 자체 서명 된 인증서가 있습니다.
그러나 모든 브라우저에서 연결을 신뢰할 수 없다는 오류가 발생했습니다. 계속 하시겠습니까? 계속을 클릭하면 정상적으로 작동합니다.
누군가가 자체 서명 된 인증서로이 오류를 우회 한 적이 있다면 계몽하십시오.
답변
localhost에 대한 SSL 인증서를 생성하는 방법 : 링크
openssl genrsa -des3 -out server.key 1024
여기 에 비밀번호 를 입력해야하며 다음 단계에서 다시 입력해야합니다.
openssl req -new -key server.key -out server.csr
“일반 이름”을 묻는 메시지가 표시되면 다음을 입력합니다. localhost
openssl x509 -req -days 1024 -in server.csr -signkey server.key -out server.crt
답변
나를 위해 일하는 것은 다음과 같습니다.
창문에
1) 이것을 % WINDIR % \ System32 \ drivers \ etc \ hosts 파일에 추가하십시오 : 127.0.0.1 localdev.YOURSITE.net (브라우저가 ‘localhost’에 문제가 있기 때문입니다 (교차 원본 스크립팅의 경우).
Windows Vista 및 Windows 7 Vista 및 Windows 7은 UAC (사용자 계정 컨트롤)를 사용하므로 메모장을 관리자 권한으로 실행해야합니다.
-
시작-> 모든 프로그램-> 보조 프로그램을 클릭합니다.
-
메모장을 마우스 오른쪽 단추로 클릭하고 관리자 권한으로 실행을 선택하십시오.
-
“Windows에 권한이 필요합니다”UAC 창에서 계속을 클릭합니다.
-
메모장이 열리면 파일-> 열기를 클릭합니다.
-
파일 이름 필드에 C : \ Windows \ System32 \ Drivers \ etc \ hosts를 입력합니다.
-
열기 클릭
-
이것을 % WINDIR % \ System32 \ drivers \ etc \ hosts 파일에 추가하십시오 : 127.0.0.1 localdev.YOURSITE.net
-
저장
-
브라우저를 닫고 다시 시작하십시오.
Mac 또는 Linux :
su
권한으로 / etc / hosts 열기- 더하다
127.0.0.1 localdev.YOURSITE.net
- 저장해
개발할 때 localhost 대신 localdev.YOURSITE.net을 사용하므로 IDE에서 실행 / 디버그 구성을 사용하는 경우 업데이트해야합니다.
cookiem을 만들 때 “.YOURSITE.net”을 cookiedomain (시작 부분에 점 포함)으로 사용하면 모든 하위 도메인에서 작동합니다.
2) 해당 localdev.url을 사용하여 인증서를 만듭니다.
팁 : Windows에서 인증서를 생성하는 데 문제가있는 경우 VirtualBox 또는 Vmware 시스템을 대신 사용하십시오.
3)
http://www.charlesproxy.com/documentation/using-charles/ssl-certificates/에 설명 된대로 인증서를 가져옵니다 .
답변
@FiloSottile 의 Mkcert는이 프로세스를 매우 간단하게 만듭니다.
- mkcert 설치 , macOS / Windows / Linux에 대한 지침이 있습니다.
mkcert -install
로컬 CA를 만들려면mkcert localhost 127.0.0.1 ::1
현재 디렉토리에서 localhost에 대한 신뢰할 수있는 인증서를 만들려면- 노드 (시스템 루트 저장소를 사용하지 않음)를 사용하고 있으므로 환경 변수에 CA를 명시 적으로 지정 해야 합니다. 예 :
export NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem"
- 마지막으로 다양한 다른 답변 (예 : 아래)에 설명 된 설정을 사용하여 익스프레스 서버를 실행합니다.
- 팔. localhost의 녹색 수영.
기본 노드 설정 :
const https = require('https');
const fs = require('fs');
const express = require('express');
const app = express();
const server = https.createServer({
key: fs.readFileSync('/XXX/localhost+2-key.pem'), // where's me key?
cert: fs.readFileSync('/XXX/localhost+2.pem'), // where's me cert?
requestCert: false,
rejectUnauthorized: false,
}, app).listen(10443); // get creative
답변
OSX / Chrome을 사용하는 경우 http://www.robpeck.com/2010/10/google-chrome-mac-os-x-and에 설명 된대로 자체 서명 된 SSL 인증서를 시스템 키 체인에 추가 할 수 있습니다 . -자체 서명 SSL 인증서
수동 프로세스이지만 마침내 작동하게되었습니다. CN (일반 이름)이 “localhost”(포트 없음)로 설정되어 있는지 확인하고 인증서가 추가 된 후 인증서의 모든 신뢰 옵션이 “항상 신뢰”로 설정되어 있는지 확인하십시오. 또한 “로그인”키 체인이 아닌 “시스템”키 체인에 추가해야합니다.