오픈 소스 코드에 직접 서명해야합니까?


11

macOS 10.14를 사용하고 Github에서 찾은 Vim 용 오픈 소스 플러그인을 설치하려고 할 때 문제가 발생했습니다. 소스 코드를 다운로드하여 직접 컴파일했지만 제대로 작동했지만 "실행시 코드 서명 (프로세스에서 사용할 수 없음)"으로 인해 실행이 중단되었습니다.

이것은 내 머리를 감쌀 수없는 많은 질문을 주었다.

직접 서명해도되지만 코드 서명의 목적을 망치지는 않습니까? 인터넷에서 코드에 서명하고 "이 앱은 인터넷에서 다운로드되었습니다"대화 상자에서 알 수없는 개발자의 앱을 허용하는 데 질적 차이가 있습니까?

내가 그렇게하지 않으면 누구의 "책임"에 서명해야합니까? 저장소 관리자? 기고자? Apple은 오픈 소스 개발자가 항상 Apple 개발자 ID를 가질 것으로 기대합니까? 아니면 코드 서명의 목적을 잘못 이해 했습니까?

편집하다:

명확히하기 위해, 내 질문은 내가 직접 작성하는 서명되지 않은 소스 코드를 어떻게 처리해야 하는가입니다. 기여자들이 특히 오픈 소스 프로젝트에 대한 작은 기여에 대해서는 코드에 서명 할 수 있거나 기억할 필요가 없기 때문입니다. 많은 기여자와 함께.

답변:


9

임시 코드 서명

직접 컴파일하고 코드 서명 이 필요한 타사 응용 프로그램 및 바이너리의 경우 임시 코드 서명을 사용하십시오 .

  • 서명없이 응용 프로그램이 실행되지 않는다고 가정합니다.
  • 응용 프로그램이 배포되지 않을 것이라고 가정합니다.
  • 서명이 유효한지 신경 쓰지 않는다고 가정합니다.

임시 서명은 안정적인 보안 이점을 제공하지 않습니다. 응용 프로그램이 변경되었는지 확인하고 자격과 같은 보안 제한을 응용 프로그램에 적용하는 데 사용할 수 있습니다.

임시 서명은의 유효성을 검사 codesign하지만 유효 하지는 않습니다 spctl. 이것은 서명되는 바이너리에 따라 중요하거나 중요하지 않을 수 있습니다. 응용 프로그램 및 실행 파일의 경우 spctl로컬로 생성 된 이진 파일에서 실행되지 않으므로 문제 가되지 않습니다.

왜 코드 서명인가?

정제 된 질문과 관련하여 :

기여자가 기여자가 항상 자신의 코드에 서명 할 수 있거나 기억할 수있는 것은 아니기 때문에, 특히 많은 기여자가있는 오픈 소스 프로젝트에 작은 기여를하는 경우에는 필자가 서명하지 않은 소스 코드를 처리하는 방법.

대부분 자체 컴파일 된 응용 프로그램의 경우 코드 서명이 필요하지 않습니다. 이것은 애플리케이션의 코드를 신뢰한다고 가정합니다. macOS의 경우 Finder에서 신뢰할 수없는 응용 프로그램을 열 수 있습니다. Apple의 미확인 개발자가 응용 프로그램 열기를 참조하십시오 .

코드 나 개발자를 신뢰하지 않으면 응용 프로그램을 컴파일하거나 실행하지 마십시오.

당신의 책임

소스 코드 제공자는 사전 빌드 된 코드 서명 바이너리를 제공 할 책임이나 의무가 없습니다. 자체 컴파일 된 모든 코드 서명은 선택과 책임입니다.

  • Apple 코드 서명을 위해 App Store에 제출해야합니다.

  • 애플 요청 자신의 앱 스토어 외부 개발자는 자신의 코드에 서명하지만, 아직 필요하지 않습니다.

두 경우 모두 최종 바이너리 만 서명됩니다. 원본 소스 코드와 리소스는 서명되지 않았습니다.

소스 코드에 서명하지 않았습니다

소스 코드 자체는 macOS에 대해 의미있는 방식으로 코드 서명 될 수 없습니다. 소스 파일과 코드는 다른 파일과 마찬가지로 디지털 서명이 가능하지만 결과 응용 프로그램이나 바이너리가 macOS에서 처리되는 방식에는 영향을 미치지 않습니다.

Mac 응용 프로그램을 임시 코드 서명하는 방법

임시 서명을 사용하여 macOS에서 응용 프로그램을 공동 디자인하려면 identity -s플래그를 -다음 과 같이 설정하십시오 .

codesign --force -s - </path/to/application>

codesign명령 의 다른 모든 규칙, 요구 사항 및 순열은 동일하게 유지됩니다.

이 플래그 --force는 여기에서 기존 서명을 덮어 쓰는 데 사용됩니다.

프레임 워크 및 임베디드 서비스와 같은 서브 리소스에 서명 --deep하기 위해 codesign명령에 플래그 를 추가해야 할 수도 있습니다.


애드혹 서명을 권장하는 이유는 무엇입니까? 귀하가 링크 한 답변은 "실제로 임시 서명 된 바이너리를 생성하는 것은 Apple 개발자에게는 실질적인 가치 일뿐"입니다.
Wowfunhappy

그건 말이되지 않습니다. 임시 서명을 추가하면 서명 유효성 검사가 실패합니다. 이것은 당신에게 아무데도 없습니다-프로그램은 정확히 같은 오류 메시지와 함께 실패합니다.
jksoegaard 2016

예, Ad-hoc Signinig에 대한 내 답변에 대한 링크를 제거하고 가정을 추가 한 것으로 나타났습니다. 그러나 이러한 가정은 전혀 적용되지 않습니까? -당신은 응용 프로그램을 실행하는 것에 대한 질문 인 것처럼 대답하는 것 같습니다. 그렇지 않습니다. OP가 플러그인을 추가하려는 이미 서명 된 응용 프로그램을 갖는 것입니다. 즉, 플러그인은 원래 서명 된 애플리케이션 (Vim)을 마스터로하여 라이브러리 유효성 검사를 통과해야합니다.
jksoegaard

원래 질문이 수정되었습니다. 그대로 넓습니다. 질문자는이 답변에 대해 의견을 말하고, 명확하게 설명하고 시도하여 답변을 얻을 수 있습니다. 이 답변은 편집 된 질문에 답변하고 실용적인 접근 방식을 제공합니다. 그것이 도움이되지 않거나 잘못된 가정이 있다면, 질문자는 희망적으로 차임하고 그들의 의도를 분명히 할 수 있습니다.
Graham Miln

1
이 답변은 도움이되었습니다. 애플 문서가 이해하기 어렵다는 것을 알았 기 때문에 제 질문은 매우 일반적이었습니다. 임시 서명을 사용하면 내가 가진 특정 문제가 해결되었습니다.
Syntaxén

5

프로그램에 직접 서명하는 것은 코드 서명의 목적을 망치지 않습니다. 코드 서명의 일반적인 목적은 프로그램이 원래 특정 엔티티 (개인 또는 회사)가 작성한 수정되지 않은 사본인지 확인할 수 있도록하는 것입니다. 컴퓨터에서만 실행되도록 프로그램에 직접 서명하면 시스템에서 실제로 이진 파일을 만든 프로그램인지 다른 사람이 수정하지 않았는지 확인할 수 있습니다.

응용 프로그램 바이너리에 직접 서명하고 GateKeeper에서 미확인 개발자의 앱을 허용하는 것의 질적 차이는 전자의 경우 단일의 특정 응용 프로그램을 실행할 수 있다는 것입니다. 다른 앱을 마우스 오른쪽 버튼으로 클릭하고 열기를 선택하면됩니다. 즉, 특정 프로그램에 직접 서명함으로써 더욱 제한적이며 "보안 적"입니다.

서명의 책임은 전적으로 귀하의 책임입니다. 오픈 소스 개발자는 소스 코드에 서명 할 수 없습니다. 컴파일 된 바이너리에만 서명 할 수 있습니다. 컴파일 된 바이너리를 직접 제작할 때는 서명 한 서명이 필요합니다.

Apple 웹 사이트에서 개발자 계정에 가입하면 서명에 사용할 수있는 인증서를 만들 수 있습니다. 개발자이고 Mac에서 실행할 바이너리를 정기적으로 컴파일하는 경우이 방법을 사용하는 것이 좋습니다. 이것이 다시는하지 않을 일회성 일이라면,이 과정을 거치는 것은 과잉 일 것입니다. YMMV.

귀하의 질문에 대한 다른 답변은 바이너리에 임시 서명을 사용하는 것이 좋습니다. 작동하지 않습니다. 바이너리를 GateKeeper와 함께 가장 안전한 설정으로 실행하려면 유효한 서명을 생성해야합니다.


1

오픈 소스 코드에 직접 서명해야합니까?

개발자가 아니라면 아닙니다.

간단히 말해서, 코드 서명 은 당신 (개발자)이 당신이 누구인지 말하고 마지막으로 서명 한 후에 코드가 변경되지 않았다고 말하는 방법입니다.

인터넷에서 코드에 서명하고 "이 앱은 인터넷에서 다운로드되었습니다"대화 상자에서 알 수없는 개발자의 앱을 허용하는 데 질적 차이가 있습니까?

혼란스러운 코드 서명 (App Store에 앱을 게시하기 위해 개발자가 필요로하는 것) 및 Gatekeeper (Mac이 알 수없는 개발자로부터 소프트웨어를 설치하지 못하게하는 것)와 같습니다.

Mac이 App Store 및 식별 된 개발자 모두로부터 소프트웨어를 설치하도록 허용하는 경우에도 소프트웨어가 설치 될 것이라는 사실을 알리는 팝업이 계속 나타납니다.

알 수없는 개발자가 제공 한 경우 "경고 아이콘"과 동일한 팝업이 표시됩니다.

여전히 소프트웨어를 설치할 수 있습니다. 이것은 사용자 상호 작용이 실제로 소프트웨어를 실제로 설치하여 자체 설치 맬웨어에 대한 보안 계층을 제공하는 메커니즘입니다.


감사합니다. 일부 질문에 대한 답변은 아닙니다. 나는 내가 묻는 것에 더 구체적으로 노력하기 위해 내 질문을 편집했다
Syntaxén
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.