반응형

먼저 아이폰 설정 부터 손봐줘야 한다.
설정 앱 > Safari > 고급(맨 아래에 있음) > '웹 속성' OFF를 ON으로 바꿔준다.

다음은 맥에서 Safari앱을 실행한다.
Safari를 못 찾는다면 Finder에서 응용프로그램으로 가보면 Safari가 있다.
Safari 실행 후 설정으로 이동

팝업 윈도우가 뜨면 맨 우측 상단의 고급을 눌러보자
그럼 하단에 메뉴 막대에서 개발자용 메뉴 보기 라는게 체크되어 있는지 확인하고 언체크라면 체크로 바꿔주자 

그럼 Safari의 메뉴들 중 중간 쯤 책갈피와 윈도우 사이에 개발자용이란게 뜨는걸 확인할 수 있을 것이다.

그럼 이제 개발자용을 클릭해보자.

아이폰과 맥이 케이블로 연결되어 있다면 저렇게 연결된 아이폰이 뜰것이고 >를 눌러보면 검사할 수 있는 응용 프로그램 없음 이라고 되어 있을 것이다.

Xcode에서 디버깅 할 wkWebview가 탑재된 앱을 실행하고 다시 Safari를 봐보자
그럼 아깐 검사할 수 있는 응용 프로그램 없음 이라고 되어 있던 곳에 우리의 앱이 보여질 것이다.
거기에 추가로 호출하고 있는 웹페이지까지 보여진다.
만약 테스트 하고 있는 아이폰의 OS가 최신버전인 16.4 버전 이후라면 아래 코드를 webview를 생성하는 곳에 살포시 넣어준다.
        if #available(iOS 16.4, *) {
            webView.isInspectable = true
        } else {
            // Fallback on earlier versions
        }
난 didload에서 wkWebview를 addsub해주고 있기 때문에 didload에 넣어줬다.

앱에서 웹뷰의 링크들을 요리조리 눌러보다 보면 오류가 있는 페이지에선 이렇게 오류들이 뜰 것이다.
마치 크롬의 개발자 도구처럼 말이다.

여러가지 웹 사이트내 오류가 확인되고 있는 모습니다.

난 이번에 골탕 먹은게 뭐였냐면 ATS 때문이었다.
개발서버엔 SSL적용이 잘 되지 않았다.
하지만 실서버엔 SSL이 적용 되었다.
따라서 plist.info에 ATS 예외 도메인 처리를 해두었다.
그런데 사이트는 뜨지만 이상하게 자바스크립트단에서 자꾸 막히는 증상이 발현되었기 때문에 도무지 이해가 안 갔는데
기존 소스들이 jQuery js파일을 다운받지 않고 cdn을 사용하여 실시간으로 받아오고 있었고 이 cdn호출시 http로 불러와졌기 때문에 이런 오류가 나는 구조상의 문제였다.

참고로 화면 캡쳐는 이미 ATS 처리를 한 직후의 캡쳐라 jquery오류는 나타나지 않는 모습니다.


오류가 확인되었으니 마찬가지로 예외 도메인으로 등록해주면 되니 아래처럼 plist.info를 설정해주니 
App Transport Security Settings
Allow Arbitrary Loads NO
Exception Domains
   code.jquery.com
      NSTemporaryExceptionMinimumTLSVersion TLSv1.2
      NSIncludesSubdomains YES
      NSExceptionAllowsInsecureHTTPLoads YES
      NSExceptionRequiresForwardSecrecy NO

참 고생했다.

반응형
Posted by Hippalus
,

반응형

보안은 나날이 강화되고 있고 앱을 올릴때도 SSL이 필수가 되었고(물론 예외 처리는 가능) 웹은 말할 필요가 없다.

일찍이 크로스사이트가 막혔고 이젠 혼합콘텐츠란걸 알게 되었다.

 

혼합콘텐츠란 SSL이 적용된 사이트에서 SSL이 적용되지 않은 사이트의 컨텐츠(이미지, 동영상, 스크립트, CSS 등)를 불러오는 방식인데 자세한 내용은 구글의 블로그를 참고하자

(https://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content?hl=ko)

자세히 잘 설명되어 있다.

읽다보면 "나(구글)님께서 널 때렸는데 니가 왜 맞아야 하는지 설명해줄께" 처럼 아주 잘 와닿는다.

 

혼합컨텐츠가 뭔진 알았을테고

혼합컨텐츠로 인해 컨텐츠가 불러와지지 않는 심각한 문제가 생겼다면 해결하는 방법은 다음과 같다.

 

크롬은 사진처럼 주소창의 자물쇠 아이콘을 눌러 사이트 설정 > 안전하지 않은 콘텐츠의 차단(기본값)을 허용으로 바꿔주면 동작한다.

(익스플로러는 망한 브라우저니 대충 알아서 옵션 설정을 하면 됨)

 

그럼 이게 왜 필요한지 생각해보자

특수한 경우이긴 하지만 이 특수한 경우를 접하게 되면 사람 돌아버린다.

하루 이틀 시간 낭비는 예사다.

인생 짧으니 내 경험을 공유하고자 한다.

 

상황은 이러하다.

동영상이나 음원처럼 용량이 큰 파일을 CDN을 통해 서비스한다 치자

(회사의 CDN 주소를 공개하기엔 뭐하니 웹상에 있는 클래식 음원을 하나 불러와보자.)

그럼 플레이어로 불러와야 하는데 그냥 박아넣으면 용용죽는다. 안된다.

 

 

그럼 어쩌야 할까?

이렇게 해야 한다.

 

        var player = new Audio('http://www.hochmuth.com/mp3/Haydn_Cello_Concerto_D-1.mp3');

        player.controls = false; //컨트롤 안보여줄래요

        document.body.appendChild(player);

        player.play();

 

넣었다 뺐다 넣었다 뺐다

 

쉬운가?

찾아내는데 2시간 넘게 걸렸다. -_-

 

 

그다음은 혼합컨텐츠 문제

이렇게 처리해도 내 사이트가 SSL인데 위에 저 클래식 음원은 SSL을 지원하지 않는다면 HTTP로 호출할 수 밖에 없다.

크롬의 검사 기능을 통해 왜 플레이가 안되는지 확인해보면 ERR_CERT_AUTHORITY_INVALID 오류를 내뱉고 있다.

 

안타깝게도 국내 CDN서비스 업체들은 아직 상황 판단을 못하는건지 HTTPS를 지원하지 않는다.

모 대기업 CLOUD 상담센터 상담원에게 HTTPS지원안하냐? 계획없냐? 물어보면 "SSL CDN 어버버 네???" 이런다.

한숨 나와서 그냥 아니에요~ 하고 끊어버렸다.

 

이건 방법이 없다.

HTTPS를 지원하는 CDN업체를 찾아서 하던지 (가령 Cloudflare) 아니면 위에 언급했듯이 이용자에게 브라우저 설정을 바꿔주세요 라고 할 수 밖에 없다.

2020년 현재일 기준으로 테스트 해본 결과 크롬, 엣지, 모바일 사파리, 모바일 크롬 브라우저 중 혼합 컨텐츠를 차단시키는 브라우저는 PC크롬브라우저가 유일했다.

아마 다른 부라우저들도 수년내로 따라가지 않을까 싶다.

보안은 그렇게 강화하며 따라가곤했으니

반응형
Posted by Hippalus
,

반응형

쌀중의 쌀 닝기미

언제부턴가 갑자기 푸시가 날라가질 않음

앱소스가 바뀐것도 아니고 developer.apple.com에서 발급받은 인증서가 바뀐것도 아님.

그런데 안됨.


JAVA로 만든 푸시 서버는 계속 아래와 같은 오류만 뱉음

remote host closed connection during handshake apns


원래 키체인에서 p12파일 추출하면 되던게 아무리 인증서를 다시 발급받고 푸시 인증서를 재발급 받아도 안됨

찾아보니 닝기미 뭐가 꼬인건지 아래와 같이 해야만 발송됨


1.기본적인 인증서 발급과정은 동일함.

developer.apple.com > member center > Identifiers > App IDs > 푸시 설정할 앱 선택 > 



CSR파일을 통해 푸시 인증서 발급 후 다운로드

다운로드 받은 후 실행



응용프로그램 > 유틸리티 > 키체인 실행 후 애플개발자사이트의 app id로 인증서가 등록되었는지 체크

중요 : 인증서 옆에 삼각형이 반드시 표시되어야 함!



삼각형이 없다면 키체인에 등록된 개발자 인증서(개발용과 배포용)를 모두 지워버린 후 developer.apple.com > member center > Certificates로 이동하여 개발용, 배포용 인증서를 다시 만듬.

이때 CertificateSigningRequest.certSigningRequest 파일이 필요한데 이 파일도 그냥 다시 만들어버리면 됨.

만드는 방법은 키체인 > 키체인 접근 > 인증서지원 > 인증 기관에서 인증서 요청메뉴에서 CSR파일을 생성하면 됨



이때 또 중요한점!

사용자 이메일 주소는 애플 개발자로 등록된 이메일이고 일반이름은 아무거나 입력하면 됨.

요청항목은 CA로 이메일 보냄이 아닌 디스크에 저장됨 라디오 버튼 선택 후 본인이 키 쌍 정보 지정을 반드시 체크해줘야 함!

더럽게 복잡하고 지저분한 애플 인증서 발급 시스템! 망해라 애플!



다시 올아와 키체인에 등록된 인증서 옆에 삼각형이 있음을 확인된 경우

삼각형을 눌러 인증서와 키(열쇠) 2개 행을 모두 선택하여 2개 항목 보내기 하면 암호를 물어보고 암호를 알아서 입력하면 p12파일이 생성됨

원랜 이 상태로 JAVA APNS에서 사용하면 되는데 이게 안먹힘!!!

remote host closed connection during handshake apns

이 p12파일로 푸시 테스트를 하면 이 메세지가 뜸! ㅅㅍㅅㅍㅅㅍㅅㅍ 망해라 애플!


2.이제부터 해결책을 제시함

일단 p12가 추출되었다면 

다운받은 인증서 developer_identity.cer 파일을 같은 폴더 안에 놓고

p12파일은 편의상 mykey.p12로 이름을 바꿔주고

cer파일은 developer_identity로 이름을 바꿔줌

(안바꿔줘도 되지만 안바꿔주려면 아래 터미널에서 실행할 명령어를 알아서 바꿔주길)


터미널을 실행시킴

인증서와 p12파일이 존재하는 폴더로 이동함.

이동하는 방법은 터미널에서 cd라고 치고 한칸 띄고 finder에서 그냥 해당 폴더를 드래그 드롭 하면 알아서 경로가 셋팅됨. 엔터만 치면 됨

참 쉽죠~?  망해라 애플!


이제부턴 터미널에서 다음과 같이 입력함

openssl x509 -in developer_identity.cer -inform DER -out developer_identity.pem -outform PEM

openssl pkcs12 -nocerts -in mykey.p12 -out mykey.pem

openssl pkcs12 -export -inkey mykey.pem -in developer_identity.pem -out iphone_dev.p12


참고로

openssl x509 -in developer_identity.cer -inform DER -out developer_identity.pem -outform PEM 를 입력하면 그냥 커맨드가 실행되고 아무런 변화가 없음

openssl pkcs12 -nocerts -in mykey.p12 -out mykey.pem 를 입력하면 암호를 계속 물어보는데 이때 앞서 p12파일 추출할때 입력한 암호를 계속 입력하면 됨



openssl pkcs12 -export -inkey mykey.pem -in developer_identity.pem -out iphone_dev.p12 를 입력하면 또 마찬가지로 암호를 요구하므로 또 p12파일 추출할때 입력한 암호를 입력하면 됨


이제 끝임

이과정까지 끝내면 드디어 p12파일이 생성됨

파일 이름은 iphone_dev.p12 파일임.


이 파일을 JAVA APNS 프로그램에서 사용해야 함.

이름은 알아서 바꿔주면 됨.

아직 테스트는 안해봤지만 개발용 p12말고 실서비스도 마찬가지일거라 판단됨.

이 무슨 80년대식 인증서 발급 쌩쑈인가!

애플의 작태가 이해가 안됨.

푸시 발송을 좀 간소화 하면 안되나? 망해라 애플!


이상 애플 푸시 인증서 발급 부터 open SSL을 통한 p12파일 추출 끝

다시한 번 외쳐본다.


망해라 애플!


반응형
Posted by Hippalus
,