인증서나 주소 어디에도 작년에 strongSwan에 연결되던 iPhone이 올해 실패하는 이유는 없습니다. 주소, 미리 공유한 키, 클라이언트 신원 중 무엇도 바뀌었을 필요가 없습니다. 움직인 것은 휴대폰 내장 클라이언트가 협상할 의사가 있는 변환 목록이고, 그 목록이 서버의 목록과 더 이상 겹치지 않으면 상대의 신원을 확인하기도 전에 교환이 끝납니다.

판정을 내리는 로그 줄

그 연결의 로그 수준을 올리고 결과를 결정하는 두 항목 — 휴대폰이 제시한 것과 서버가 고른 것 — 을 찾으세요. 로그가 선택된 제안 없이 끝나고 아무것도 맞지 않았다고 기록하면, 인증은 시도조차 되지 않았습니다. 새 인증서와 새 비밀번호는 둘 다 더 뒤 단계에서 소비되므로 그 지점에서 아무것도 바꾸지 못합니다. 어느 쪽도 신원을 확인하기 전에 정해진 결과에 영향을 줄 수 없습니다.

무엇이든 고치기 전에 두 가지 실패 형태를 구분하세요. 변환을 고쳐도 거부된 자격 증명은 살아나지 않고, 자격 증명을 고쳐도 거부된 변환은 살아나지 않습니다. 선택된 제안을 지목하는 로그 항목이 두 경우 중 어느 쪽인지 알려줍니다. 그 항목이 없으면 추측하는 것입니다.

선택된 줄은 제안을 친절한 이름표가 아니라 변환 집합으로 지목합니다암호화, 무결성, 그룹 필드를 비교하세요 그 줄의 값을 휴대폰이 보낸 목록과 맞춰 보세요. 필드 하나만 어긋나도 집니다.

휴대폰에서 무엇이 바뀌었나

iOS 한 릴리스가 클라이언트가 쓰려는 알고리즘을 잘라냈습니다. 약한 무결성 해시, 작은 Diffie-Hellman 그룹, 구식 옵션을 먼저 나열한 제안은 더 이상 받아들여지지 않습니다.

여기서 긴 목록이 더 안전하지는 않습니다. 선택은 휴대폰의 허용 집합과 자체 우선순위를 따르므로, 넓은 카탈로그를 광고하는 서버도 현대적 항목이 선택되지 않으면 협상에서 집니다. 현대적 항목을 앞에 둔 짧은 목록을 고르세요. 구식 옵션으로 시작하는 긴 목록은 피하려는 실패를 정확히 불러들입니다. 허용 집합은 클라이언트가 업데이트될 때마다 움직이는 외부 제약이므로, 어제 되던 설정은 어제에 대한 증거입니다.

여전히 협상되는 한 쌍

현재 휴대폰에는 현대적 조합 하나로 충분합니다. 협상되는 한 쌍은 이렇습니다:

ike=aes256-sha2_256-modp2048
esp=aes256-sha2_256

ike 줄은 키 교환이 진행되는 동안 쓰는 암호화, 무결성, Diffie-Hellman 그룹을 담습니다. esp 줄은, 그룹이 적용 전에 이미 정해졌으므로, 데이터 채널만 다룹니다. 연결을 다시 읽거나 데몬을 다시 시작한 뒤 휴대폰을 다시 연결하세요. 그 그룹 값은 서비스하는 모든 클라이언트가 아직 받아들일 때만 유지하고, 낡은 피어 하나가 더 필요하다고 모두에게 제안을 넓히지 마세요.

고칠 곳 세 군데, 보통 하나는 닫혀 있습니다

  • 모든 피어에 현대적 제안 하나. 모든 클라이언트가 현재 휴대폰과 데스크톱일 때 맞습니다. 옛 변환을 둘러싸 협상하는 대신 삭제합니다.
  • Apple 클라이언트용 두 번째 연결 정의. 낡은 피어 하나를 살려 두면서 휴대폰에 받아들일 제안을 줍니다. 연결 블록이 하나 더 들고 예외가 눈에 보이게 됩니다.
  • 클라이언트를 바꾸는 것. 좀처럼 열려 있지 않고, 관리 시스템이나 앱이 프로필을 배포하면 만질 제안 편집기도 없고 내장 클라이언트도 그것을 노출하지 않습니다.

통제 밖의 기기를 업데이트할 수 없으면 두 번째를 고르세요. 낡은 피어를 퇴역시키고 정책 하나로 가고 싶으면 첫 번째를 고르세요.

어느 쪽이든 선택은 설정에 보이고, 그게 핵심입니다. 옛 변환까지 내려가 협상하는 조용한 폴백은 어떤 리뷰도 그것을 드러내지 못하기 때문에 명시적 블록보다 나쁩니다.

증명하고 나서 기록하세요

다시 연결하고 서버에서 세 가지 사실을 따로 확인하세요. 제안이 선택되었는지, 연결이 established로 보이는지, 클라이언트가 주소를 받았는지입니다. 원격 주소 없는 established 핸드셰이크는 풀이나 트래픽 셀렉터를 가리키므로 별도 변경에 속하고, 둘을 함께 다루면 해결된 협상이 미해결처럼 보입니다.

받아들여진 변환 집합, 언제 바꿨는지, 어느 클라이언트 빌드로 확인했는지 적어 두세요. 다음 업데이트가 요구 사항을 다시 옮길 수 있고, 통했던 값은 새 값 옆에 가장 먼저 두고 싶은 것입니다.

관련 글