3

클라이언트 인증을 사용하는 SSL 소켓이 필요한 Chrome 앱을 작성 중입니다. 필자는 Java에서 동일한 트러스트 스토어와 키 저장소를 사용하여이 작업을 수행했습니다. 여기Chrome 클라이언트의 인증서로 SSL 클라이언트 인증

내가 크롬 (Mac 및 크롬 북)에서 수행 한 것입니다 :

  • 시스템에 클라이언트 키 (P12) 및 CA (하나의 루트 CA, 하나의 중간 CA)를 추가합니다.

  • Chrome 앱의 경우 기존 socket API와 새로운 sockets.tcp API를 사용해보세요.

  • 항상 수신 오류 ERR_SSL_CLIENT_AUTH_CERT_NEEDED입니다. 하지만 나는 이미 올바른 클라이언트 인증서와 CA를 가지고 있다고 생각합니다. 기존의 소켓 API에 대한

코드 :

chrome.socket.create('tcp',{},function(createInfo){ 
    mySocketId = createInfo.socketId; 
    chrome.socket.connect(mySocketId,'host', 12345, function(connectResult){ 
     chrome.socket.secure(mySocketId,{},function(secureResult){ 
      console.log('secureResult '+secureResult); 
     }); 
    }); 
}); 

내 질문은 다음과 같습니다

  1. 합니까 인증서와 크롬 API 지원 클라이언트 인증?
  2. 지원되는 경우 Chrome에 인증서를 어떻게 제공합니까?

답변

2

크롬 API는 tcp.secure를 통해 클라이언트 인증을 지원하지만, 꽤 큰주의와 - SSL 지원을 위해 원래 feature request이 말한다 : 내장 TLS 스택을 사용

합니다. 죄송합니다. 여기에 인증서를 추가/관리 할 수있는 기능이 없으므로 기존 구성을 사용하십시오.

제안했듯이 수동으로 Chrome에 인증서를 추가해야합니다. 설정 -> 고급 설정 표시 -> HTTPS/SSL -> 인증서 관리에서 가져 오기 및 내보내기 기능을 사용할 수 있습니다. this bug 주위에 tcp.setPaused으로 전화하여 tcp.secure 전에 전화해야합니다. 당신은 크롬 API가 제공하는 것보다 세분화 된 제어를 필요로하는 경우

그러나 다른 방법은, 당신은 또한 일반 크롬 TCP 소켓 API의 상단에 자신의 자바 스크립트 TLS 구현을 추가 할 수 있습니다. 다행히도 라이브러리 forge에는 이미 하나의 구현이 있습니다. forgechrome.sockets.tcphere과 함께 사용하는 예를 볼 수 있습니다. 이 방법은 인증서 피닝 등과 같은 다른 기능을 지원하지는 않지만 훨씬 단조롭게 제어 할 수 있지만 forge는 TLS 1.2 나 ECDHE 암호 제품군을 아직 지원하지 않습니다 (이러한 기능은 roadmap에서 계획되었지만) .

관련 문제