2012-01-09 2 views
0

인증없이 ios 응용 프로그램에서 작업하고 있습니다. 이제 내 ios 응용 프로그램이 아닌 다른 호출에서 내 서버 API를 보호하고 싶습니다. 가능한 해결책은 응용 프로그램이 주요 문제이므로 장치에 저장되지 않은 고유 키 (appname 및 signing을 기반으로)를 생성하는 것입니다. 일부 파일 암호화와 결합 된 일부 보호 기능을 수행하는 애플리케이션 로직을 생각할 수도 있지만 문제는 무언가가 저장된다는 것입니다 (예 : 공개 키는 키 체인에 저장할 수 있지만 API 해커에게는 안전하지 않습니다).ios가 응용 프로그램 관련 키를 생성합니다.

누구나 내가 어떻게 처리 할 수 ​​있는지에 대한 조언이나 조언이 있으십니까? 한마디로 사전

답변

1

에서

덕분에, 키가 아이폰, 그것은 아이폰에서 추출 가능한 사용할 수있는 경우 요청이 응용 프로그램에서 제공되었는지 확인 할 100 % 안전한 방법은 없습니다.

말하면서 애플리케이션의 정보에서 핵심 런타임을 계산하여 합리적으로 안전하게 만들 수 있지만 SSL을 통해 통신 할 수는 있지만 결정된 공격자는 항상 키 생성을 리버스 엔지니어링 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 애플리케이션의 정보에서 주요 런타임을 계산한다는 것은 무엇을 의미합니까? 타임 스탬프/일부 코드 로직과 같은 의미입니까? 앞에서 말했듯이 100 % 안전한 방법은 없습니다. (:(((( – bdt

+0

) 키를 응용 프로그램에서 암호화하거나 런타임에서 일부 정적 데이터를 계산하는 것과 마찬가지로, 16 진수 편집기에서 바이너리를 여는 것으로 복구 할 수 있습니다. 또한 어둠에 의한 보안이라고도하지만 일반적으로 일반적인 경우에 할 수있는 최선의 방법입니다. –

0

상호 인증 된 SSL을 사용하면 서버에서 앱의 수신 연결 만 수락하고 앱은 서버와 통신합니다.

다음은 높은 수준의 접근 방식입니다. 자체 서명 된 서버 SSL 인증서를 작성하고 웹 서버에 전개하십시오. keytool과 같이 자유롭게 사용할 수있는 도구를 사용할 수 있습니다. Apple이 iOS SDK와 함께이 도구를 포함하고 있다고 생각합니다. 그런 다음 자체 서명 된 클라이언트를 작성한 후 응용 프로그램에 포함 된 사용자 정의 키 저장소에 자원으로 전개하십시오. 클라이언트 측 SSL 인증을 요구하고 생성 한 클라이언트 인증서 만 수락하도록 서버를 구성하십시오. 해당 클라이언트 측 인증서를 사용하여 자체를 식별하고 해당 부분에 대해 서버에 설치된 하나의 서버 측 인증서 만 수락하도록 클라이언트를 구성하십시오.

앱 이외의 다른 누군가가 서버에 연결을 시도하면 서버가 앱에 포함 된 클라이언트 인증서를 제공하지 않는 수신 SSL 연결을 거부하므로 SSL 연결이 생성되지 않습니다.

관련 문제