2010-05-05 7 views
4

iPhone 응용 프로그램에서 고객의 서버로 HTTPS 양방향 SSL 연결을 설정해야합니다. 그러나 클라이언트 측 인증서를 응용 프로그램에 전달하는 보안 방법이 없습니다 (전자 은행 응용 프로그램이므로 보안은 실제로 문제입니다). 지금까지 애플리케이션에서 인증서에 액세스 할 수있는 유일한 방법은 응용 프로그램 자체에 사전 번들로 제공하거나 가져올 수있는 URL을 노출하는 것입니다 (IPhone app with SSL client certs).iphone : 응용 프로그램에서 양방향 SSL을 설정하는 안전한 방법이 있습니까?

두 가지 방법으로 어느 제 3 자에게 인증서를받지 못하게하는 것이 위험한 것으로 받아 들여지면 양방향 SSL이 필요하지 않습니다 (누구나 클라이언트 인증서를 가질 수 있기 때문에).

전체 보안 프로토콜은 다음과 같아야합니다
- HTTPS 양방향 SSL을 응용 프로그램을
인증하는 - OTP (토큰) 기반의 사용자 등록 (이 단계에서 생성 된 클라이언트 측 키 쌍을)
- SOAP/WSS XML 서명 (이전에 생성 된 키로 서명 한 요청)

첫 번째 보안 계층 ​​(HTTPS)을 설정하는 방법에 대한 아이디어가 있습니까?

+0

2 요소 인증 또는 양방향 SSL을 수행해야합니까? 두 가지가 있습니다. 양방향 SSL은 이론적으로는 좋지만 양면에 인증서 저장소를 설정하고 인증서를 교환해야하는 혼란이 있습니다. –

+0

귀하의 앱이 고객에게 실제로 유용하다면, 인증서는 어느 시점에서 만료됩니다. 초기 설정이이 문제의 끝이라고 생각하지 마십시오. 앱에 CSR 생성 기능을 추가하고 IT 담당자가 이러한 기능을 제공하도록해야 할 수도 있습니다 (사용자의 목적에 따라 응답을하기 전에 앱 UI에서 CSR 및 원본 인증서를 확인해야합니다). – Jason

+0

2way SSL이라고 생각합니다. 내가 필요한 것은 클라이언트가 실제로 내 응용 프로그램임을 (인증서를 통해) 확인하여 서버에 HTTPS 연결을 설정하는 것입니다. 우리가 계획하는 것은 모든 사용자에 대해 하나의 인증서를 갖는 것이므로 더 높은 수준에서 http를 수행하기 때문에 사용자 관리 당 인증서가 필요 없습니다. 현재 우리는 암호화 된 인증서를 애플리케이션과 번들링하고 해독 키를 바이트 코드의 어딘가에 가지고 있다고 생각하고 있습니다. 이것은 최상위 보안이 아니지만이 계층에 충분해야합니다. 해독 키를 더 잘 보호하는 방법에 대한 아이디어가 있습니까? – pmilosev

답변

2

내 자신의 질문에 대답하기 위해 ...

보안에 고정 된 측정 척도가 없다는 것이 밝혀졌습니다. 보안 요구 사항은 시스템을 제동하기위한 대가가 그렇게하는 상을 상당히 상회하는 한 만족됩니다.

내 상황에서는 우리는 전자 뱅킹 시스템에 대해 말하고 있지만 월간 제한이 다소 낮습니다 (몇 천 달러). 질문에서 WSS XML 서명을 특징으로하는 HTTPS 위에 또 다른 보안 계층이있을 것이라고 언급했습니다. 사용자를 등록하고 공개 키를 수락하는 프로세스는 여러 단계로 수행됩니다. 첫 번째 단계에서 사용자는 내 클라이언트에서 검색된 대구와 함께 자신의 전화 번호를 보냅니다. 그런 다음 확인 코드와 함께 SMS가 사용자에게 전송됩니다. 사용자는 사용자를 식별 할 OTP 코드를 생성하는 OTP 계산기에 확인 코드를 입력합니다. 그런 다음 공개 키가 OTP 코드와 함께 서버로 전송됩니다. 여기에서 모든 요청은 서버에 이전에 전송 된 공개 키의 개인 상대자에 의해 서명됩니다.

전체 프로세스의 가장 큰 약점은 응용 프로그램을 리버스 엔지니어링하여 SLL에 사용되는 클라이언트 인증서를 검색한다는 것입니다. 이로 인해 발생하는 유일한 문제는 누군가가 사용자의 거래를 관찰 할 수 있다는 것입니다. 그러나 누군가가 거래를하기 위해서는 사용자의 비공개 키가 필요합니다. 비공개 키는 생성되고 암호화되어 키 체인에 저장됩니다. 그리고이 보안 수준을 제동하기위한 가격은 매우 높습니다.

더 높은 수준 (예 : WSS 암호화 사용)에서 사용자의 데이터를 보호하는 방법에 대해 추가로 생각할 것이지만, 시작을 위해 나는 현재 해결책을 잘 알고 있습니다.

의견이 있으십니까?

안부

-2

https가 실제로 작동하지 않습니다. 요컨대, 잘 알려진 기관이 인증서에 서명 한 보안 서버에 연결합니다.

사과 (iPhone) 수업을 사용하는 경우 '좋은'인증서 만 수락합니다. 선의로, 나는 애플이 받아 들일 만하다고 생각하는 것을 의미한다. 사용하지 않으면 (SDK에 대안이 있음) 연결을 할 수 없게됩니다 ('엔터프라이즈'개발자 라이센스가있는 경우는 제외). 이 라이센스를 충분히 보지 못했기 때문에 100 % 확신 함)

계속하려면 올바르게 서명 된 웹 사이트에 https 연결을 사용하고 사용자 이름/비밀번호 또는 챌린지가 내장 된 로그인을 시작하십시오/응답 (예 : iPhone의 고유 ID) 및 해당 연결을 사용하는 교환 키를 기반으로합니다.

이것은 응용 프로그램이 최신 인증서를 유지하기 위해 (각 연결/X 연결/매월/응용 프로그램 지정된 간격으로) 새 인증서를 쿼리해야 함을 의미합니다. 그런 다음이 인증서를 사용하여보다 안전한 서버에 연결할 수 있습니다.

[편집]

확인 this 포스트 - 당신이해야 할 요구하는지에 대한 자세한 정보가있을 수 있습니다

[/ 편집]

[EDIT2]

있습니다 OSX가 아닌 iphone 요청 - 앱 스토어 승인이 문제입니다.

+0

도구 상자에서 개념을 놓치고 있다고 생각합니다 : 상호 인증. 그것이 OP가 요구하는 것입니다. – Jason

+0

@ Jason 그는 SSL을 사용하여 클라이언트 인증을 가능하다고 생각하지 않습니다. 그 이유는 내가 그에게 -1을 준 것입니다. – rook

+0

그래서 "클라이언트 인증을 수행 할 수 없습니다"라는 메시지가 표시되고 "이 라이브러리로 클라이언트 인증을 수행 할 수 없습니다 *" . 나는 멍청한 사람이기 때문에 iPhone 라이브러리에 대해 이야기 할 수는 없지만, 클라이언트 인증이 작동하지 못하거나 팀 구성 요소가 충분하지 않아 팀원들이 스왑 아웃해야하는 라이브러리가 있습니다. 그것은 braindead가 아닙니다. – Jason

관련 문제