일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- appres
- 애플
- Xcode
- otpkey
- 앱리소스
- Android
- SwiftUI
- kmip
- 안드로이드
- WebAuthn
- openssl
- git
- apple
- fido
- SSL
- albumbook
- MYSQL
- OTP
- MFA
- OSX
- FIDO2
- 앨범북
- Nodejs
- 앱스토어
- SSH
- 2FA
- 인증
- MSYS2
- css
- SWIFT
- Today
- Total
인디노트
OS X 에서 HTTPS 사이트의 접속 테스트 본문
iOS 9 부터 관련 개발을 하다보면 네트워크 접속에 있어서 다음과 같은 에러를 만날때가 있다.
Error : Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo={NSErrorFailingURLStringKey=https://dev.otpkey.org/, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFStreamErrorDomainKey=3, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <664D4150-8314-4BA3-8D69-3320338D9CE2>.<1>, _NSURLErrorRelatedURLSessionTaskErrorKey=( ---- 어쩌구 저쩌구....
/usr/bin/nscurl --ats-diagnostics --verbose https://dev.otpkey.org
이럴때 체크 해 보면 어떤 문제인지 확인에 도움이 될 수 있다.
기본적으로 ATS 관련 조건은 다음과 같다.
The server certificate must meet at least one of the following trust requirements:
Issued by a certificate authority (CA) whose root certificate is incorporated into the operating system
Issued by a trusted root CA and installed by the user or a system administrator
The negotiated Transport Layer Security version must be TLS 1.2
The negotiated TLS connection cipher suite must support forward secrecy (FS) and be one of the following:
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
The leaf server certificate must be signed with one of the following types of keys:
Rivest-Shamir-Adleman (RSA) key with a length of at least 2048 bits
Elliptic-Curve Cryptography (ECC) key with a size of at least 256 bits
In addition, the leaf server certificate hashing algorithm must be Secure Hash Algorithm 2 (SHA-2) with a digest length of at least 256 (that is, SHA-256 or greater).
이를 무시하도록 하려면 plist 에 관련 설정을 하면 되지만... 내 경우에 잘 되지 않는것 같다. (iOS 13 이상)
App Transport Security Settings
이를 무시하고 이전 버전과 호환성을 유지하려면 다음 페이지에서 Apple 의 Cocoa Keys 들을 확인 할 수 있다.
하지만, 다음과 같은 내용에 있어서 App Store 리뷰시 근거를 제공해야 한다.
ATS에 대한 App Store 검토
특정 앱 전송 보안(ATS) 키를 사용하면 앱에 대한 추가 App Store 검토가 트리거되며 근거를 제시해야 합니다. 이러한 키는 다음과 같습니다.
NSAllowsArbitraryLoads
NSAllowsArbitraryLoadsForMedia
NSAllowsArbitraryLoadsInWebContent
NSExceptionAllowsInsecureHTTPLoads
NSExceptionMinimumTLSVersion
고려할 수 있는 정당성의 몇 가지 예는 다음과 같습니다.
보안 연결을 지원하지 않는 다른 엔터티에서 관리하는 서버에 연결해야 합니다.
보안 연결을 사용하도록 업그레이드할 수 없고 공용 호스트 이름을 통해 액세스해야 하는 장치에 대한 연결을 지원해야 합니다.
NSAllowsArbitraryLoadsInWebContent다양한 소스의 임베디드 웹 콘텐츠를 제공해야 하지만 키 에서 지원하는 클래스를 사용할 수 없음
앱은 암호화되고 개인화된 정보가 포함되지 않은 미디어 콘텐츠를 로드합니다.
App Store에 앱을 제출할 때 앱이 기본적으로 보안 연결을 할 수 없는 이유를 판단할 수 있도록 App Store에 충분한 정보를 제공하십시오.
따라서, 가능하면 해당 서버의 TLS 버전 및 TLS 알고리즘 등의 지원으로 해결하는게 합리적이라 할 수 있다.
나의 경우에는 TLS v1.3 지원의 문제였다. (서버가 TLS v1.2 까지만 제공하도록 설정되어 있었다.)
Nginx 에 다음을 추가하여 해결하고
ssl_protocols TLSv1.2 TLSv1.3;
앱 Core 의 OpenSSL 코어에 다음과 같은 키교환 알고리즘을 추가하여 해결 하였다.
SSL_CONF_cmd(CCTX, "Curves", "P-521:P-384:P-256");
SSL_CONF_cmd(CCTX, "SignatureAlgorithms", "RSA-PSS+SHA256:RSA+SHA256:RSA+SHA512:ECDSA+SHA512:AEAD-AES128-GCM-SHA256:AEAD-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:AES256-SHA");
'개발 플랫폼 및 언어' 카테고리의 다른 글
OS X 설치 이미지 변경 등 (0) | 2023.03.23 |
---|---|
안드로이드 알림 설명 잘된곳 링크 (0) | 2022.12.11 |
OS X 에서 Let’s Encrypt 인증서 받기 (0) | 2022.12.09 |
애플 개발자 등록하기 위해 DUNS 번호 받으려면 여기로 직접 들어가자 (1) | 2022.10.25 |
VM 에 Windows 11 설치할 때 문제 (0) | 2022.10.02 |