2017-05-09 3 views
1

TL 버전 : 서버의 개인 키와 함께 전달하지 않는 서버 인증서를 iOS 클라이언트에 전달할 수있는 방법이 있습니까?iOS - 고정 용 iOS 클라이언트 키 체인에 서버 인증서를 얻는 방법

저는 MacOS 서버 앱과 통신하는 iOS 클라이언트 응용 프로그램을 작성하여 (양쪽에서 제어 할 수있게되었습니다). 일을 더욱 안전하게하기 위해 자체 서명 된 인증서를 사용하여 인증서 고정을 구현했습니다. 개발 중에이 작업을 수행하기 위해 서버 인증서를 iOS 클라이언트 응용 프로그램에 하드 코드하고 클라이언트에게 TLS 핸드 셰이크 중 정확한 인증서를 제공하는 서버에만 연결하도록 클라이언트에 지시했습니다. 모든 것이 훌륭하게 작동합니다.

현실 세계에서이 시스템을 세트 (1 서버, 각 고객마다 여러 클라이언트)로 판매하고 있으므로 서버 인증서를 iOS 클라이언트에 하드 코드 할 수 없습니다. Making Certificates and Keys Available To Your App:

앱은 자신의 키 체인 액세스 그룹에서 키 체인 항목에 액세스 할 수 있습니다 : 내 계획은 여기에 언급처럼 대신 아이폰 OS 클라이언트 (이메일을 통해) 대역 중 서버 인증서를 제공하는 것입니다.

자신의 앱에서 디지털 ID를 사용하려면 가져 오기 코드를 작성해야합니다. 이것은 일반적으로 PKCS # 12 형식의 BLOB를 읽고 해당 함수를 사용하여 BLOB의 내용을 응용 프로그램의 키 체인으로 가져 오는 것을 의미합니다.

신원을 제공하는 한 가지 방법은 전자 메일을 통한 것입니다. 장치를 프로비저닝 할 때 관련 사용자에게 클라이언트 ID가 PKCS # 12 파일로 첨부 된 전자 메일을 보냅니다. 이뿐만 아니라 함께 개인 키를 전달하는 것은 매우 잘못된 것 -

내 문제는 .P12 파일이 서버의 개인 키가 인증서가 포함되어 있다는 점이다.

서버의 개인 키를 전달하는 것을 포함하지 않는 iOS 클라이언트에 서버 인증서를 전달하는 다른 방법이 있습니까?

감사합니다.

답변

1

저는 여기에 지나친 생각이 들었습니다. 해결책은 실제로 매우 간단합니다.

cert.myCustomExt1234과 같은 사용자 지정 확장명을 사용하여 대역 외 서버의 공용 인증서를 클라이언트 장치에 전자 메일로 보내야했습니다. 이는 .crt 확장 프로그램이 iOS에서 이미 소유권을 주장했기 때문에 사용자 정의 확장 프로그램 (see apple docs here)을 처리하도록 앱을 등록해야하기 때문입니다. 그럼 내 애플 리케이션에서 인증서 피닝의 모든 논리를 할 수있는 밴드를 사용하여 공개 서버 인증서를 전달했다.

키가 파일 확장자를 iOS에서 이미 주장하지 않은 것으로 변경했습니다.