about_Signing

항목
    about_signing

간단한 설명
    Windows PowerShell 실행 정책을 준수하도록 스크립트에 서명하는 방법에 대해 설명합니다.

자세한 설명
    Restricted 실행 정책은 모든 스크립트의 실행을 허용하지 않습니다. AllSigned 및 RemoteSigned 실행 
    정책은 Windows PowerShell에서 디지털 서명이 없는 스크립트를 실행하지 못하게 합니다.

    이 항목에서는 실행 정책이 RemoteSigned인 경우에도 서명되지 않은 선택된 스크립트를 실행하는 방법과 
    직접 사용하기 위해 스크립트에 서명하는 방법에 대해 설명합니다.
    
    Windows PowerShell 실행 정책에 대한 자세한 내용은 about_Execution_Policy를 참조하십시오.


 서명된 스크립트의 실행을 허용하려면
 -----------------------------------
    컴퓨터에서 Windows PowerShell을 처음 시작하는 경우 Restricted 실행 정책(기본값)이 적용될 가능성이 
    높습니다.

    Restricted 정책은 모든 스크립트의 실행을 허용하지 않습니다.

    컴퓨터에서 적용되는 실행 정책을 찾으려면 다음과 같이 입력하십시오.

        get-executionpolicy

    직접 작성한 서명되지 않은 스크립트를 로컬 컴퓨터에서 실행하거나 다른 사용자의 서명된 스크립트를 
    실행하려면 다음 명령을 사용하여 컴퓨터의 실행 정책을 RemoteSigned로 변경합니다. 

    set-executionpolicy remotesigned

    자세한 내용은 Set-ExecutionPolicy를 참조하십시오.  


 서명되지 않은 스크립트 실행(RemoteSigned 실행 정책)
 ---------------------------------------------------
    Windows PowerShell 실행 정책이 RemoteSigned이면 Windows PowerShell에서 전자 메일과 인스턴트 
    메시징 프로그램을 통해 받는 서명되지 않은 스크립트를 비롯하여 인터넷에서 다운로드한 서명되지 
    않은 스크립트를 실행하지 않습니다.

    다운로드한 스크립트를 실행하려고 하면 다음과 같은 오류 메시지가 나타납니다.

        <file-name> 파일을 로드할 수 없습니다. <file-name>에 디지털 서명하지 않았습니다.
        스크립트가 시스템에서 실행되지 않습니다. 자세한 내용은 "Get-Help about_signing"을 
        참조하십시오.

    스크립트를 실행하기 전에 코드를 검토하여 해당 스크립트가 신뢰할 수 있는 스크립트인지 확인하십시오.
    스크립트는 실행 프로그램과 동일한 효과를 갖습니다.

    서명되지 않은 스크립트를 실행하려면

        1. 사용자 컴퓨터에 스크립트 파일을 저장합니다. 
        2. 시작을 클릭하고 내 컴퓨터를 클릭한 다음 저장된 스크립트 파일을 찾습니다. 
        3. 스크립트 파일을 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다. 
        4. 차단 해제를 클릭합니다.

    인터넷에서 다운로드한 스크립트가 디지털 서명되었지만 아직 해당 게시자의 신뢰 여부를 결정하지 않은 
    경우 다음과 같은 메시지가 나타납니다.

        이 신뢰되지 않은 게시자가 서명한 소프트웨어를 실행하시겠습니까? <file-name> 파일을 
        CN=<publisher-name>이(가) 게시했지만 시스템에서 신뢰할 수 없습니다. 신뢰된 게시자가 서명한 
        스크립트만 실행하십시오.

        [V] 항상 실행 안 함 [D] 실행 안 함 [R] 한 번 실행 [A] 항상 실행 [?] 도움말(기본값"D"):
    
        게시자를 신뢰하는 경우 "한 번 실행" 또는 "항상 실행"을 선택하고, 게시자를 신뢰하지 않는 경우에는 
        "항상 실행 안 함" 또는 "실행 안 함"을 선택합니다. "항상 실행 안 함" 또는 "항상 실행"을 선택하는 경우 
        해당 게시자에 대한 메시지가 다시 표시되지 않습니다.
    

 스크립트 서명 방법
 ------------------
    사용자가 작성한 스크립트에 서명하거나 다른 곳에서 가져온 스크립트에 서명할 수 있습니다. 스크립트에 
    서명하기 전에 각 명령을 검사하여 실행해도 안전한지 확인하십시오.

    코드 서명에 대한 유용한 정보는 https://go.microsoft.com/fwlink/?LinkId=119096의 
    "Code-Signing Best Practices(코드 서명에 대한 유용한 정보)"를 참조하십시오. 

    스크립트 파일을 서명하는 방법에 대한 자세한 내용은 Set-AuthenticodeSignature를 참조하십시오.

    스크립트에 디지털 서명을 추가하려면 코드 서명 인증서를 사용하여 해당 스크립트에 서명해야 합니다. 
    스크립트 파일에 서명하는 데 적합한 인증서 유형은 다음 두 가지입니다. 

        -- 인증 기관에서 만든 인증서:

           공용 인증 기관에서는 유료로 사용자의 ID를 확인하고 코드 서명 인증서를 발급해 줍니다. 신뢰할 수 
           있는 인증 기관으로부터 인증서를 구입하면 Windows를 실행하는 다른 컴퓨터에서도 이 인증 기관을 
           신뢰하므로 이러한 컴퓨터의 사용자와 스크립트를 공유할 수 있습니다.

        -- 사용자가 만든 인증서:

           사용자 컴퓨터가 인증 기관 역할을 하는 자체 서명된 인증서를 만들 수 있습니다. 이 인증서는 
           무료이며 사용자 컴퓨터에서 스크립트를 작성, 서명 및 실행하는 데 사용할 수 있지만, 자체 서명된 
           인증서로 서명된 스크립트는 다른 컴퓨터에서 실행되지 않습니다. 

    일반적으로 직접 사용하기 위해 작성한 스크립트에 서명하는 경우와 안전한 것으로 확인한 다른 곳에서 
    가져온 스크립트에 서명하는 경우에만 자체 서명된 인증서를 사용합니다. 자체 서명된 인증서는 공유되는 
    스크립트에 적절하지 않으며, 이는 기업 내에서도 마찬가지입니다.

    자체 서명된 인증서를 만드는 경우 해당 인증서에 강력한 개인 키 보호를 사용해야 합니다. 이렇게 하면 
    악의적인 프로그램이 사용자 대신 스크립트에 서명하는 것을 막을 수 있습니다. 이에 대한 지침은 이 
    항목의 끝 부분에 나와 있습니다.


 자체 서명된 인증서 만들기
 -------------------------
    자체 서명된 인증서를 만들려면 인증서 생성 도구(MakeCert.exe)를 사용합니다. 이 도구는 Microsoft .NET 
    Framework SDK(버전 1.1 이상)와 Microsoft Windows SDK에 포함되어 있습니다. 

    MakeCert.exe 도구의 구문 및 매개 변수 설명에 대한 자세한 내용은 MSDN(Microsoft Developer Network) 
    라이브러리(https://go.microsoft.com/fwlink/?LinkId=119097)에서 "인증서 작성 도구(Makecert.exe)"를 
    참조하십시오.  

    MakeCert.exe 도구를 사용하여 인증서를 만들려면 SDK 명령 프롬프트 창에서 다음 명령을 실행합니다. 
 
    참고: 첫 번째 명령은 사용자 컴퓨터에서 로컬 인증 기관을 만들고, 두 번째 명령은 이 인증 기관으로부터 
          개인 인증서를 생성합니다. 

    참고: 명령을 복사하거나 표시된 것과 똑같이 입력할 수 있습니다. 대체가 필요하지 않지만 인증서 
          이름을 변경할 수 있습니다. 

            makecert -n "CN=PowerShell Local Certificate Root" -a sha1 `
                -eku 1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer `
                -ss Root -sr localMachine

            makecert -pe -n "CN=PowerShell User" -ss MY -a sha1 `
                -eku 1.3.6.1.5.5.7.3.3 -iv root.pvk -ic root.cer


    MakeCert.exe 도구는 개인 키 암호를 묻는 메시지를 표시합니다. 암호를 사용하면 해당 사용자의 동의 없이 
    다른 사용자가 인증서를 사용하거나 인증서에 액세스할 수 없습니다. 기억할 수 있는 암호를 만들고 
    입력하십시오. 나중에 이 암호를 사용하여 인증서를 검색할 수 있습니다.

    인증서가 제대로 생성되었는지 확인하려면 다음 명령을 사용하여 컴퓨터의 인증서 저장소에서 인증서를 
    가져옵니다. 파일 시스템 디렉터리에서는 인증서 파일을 찾을 수 없습니다.

    Windows PowerShell 프롬프트에서 다음과 같이 입력하십시오.

            get-childitem cert:\CurrentUser\my -codesigning

    이 명령은 Windows PowerShell 인증서 공급자를 사용하여 인증서에 대한 정보를 표시합니다.

    인증서가 만들어졌으면 출력에 다음과 유사하게 인증서를 식별하는 손도장이 표시됩니다.


        Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My

        Thumbprint                                Subject
        ----------                                -------
        4D4917CB140714BA5B81B96E0B18AAF2C4564FDF  CN=PowerShell User ]


 스크립트에 서명
 -------------

    자체 서명된 인증서를 만든 후에는 스크립트에 서명할 수 있습니다. AllSigned 실행 정책을 사용하는 
    경우 스크립트에 서명하면 사용자 컴퓨터에서 해당 스크립트를 실행할 수 있습니다. 

    다음 샘플 스크립트 Add-Signature.ps1은 스크립트에 서명합니다. 그러나 AllSigned 실행 정책을 
    사용하는 경우 이 스크립트를 실행하려면 먼저 Add-Signature.ps1 스크립트에 서명해야 합니다.

    이 스크립트를 사용하려면 다음 텍스트를 텍스트 파일에 복사한 다음 이름을 Add-Signature.ps1로 
    지정하십시오.

    참고: 스크립트 파일은 .txt 파일 이름 확장명을 사용하지 않습니다. 텍스트 편집기에서 ".txt"를 
          추가하면 "add-signature.ps1"과 같이 파일 이름을 따옴표로 묶으십시오.


            ## add-signature.ps1
            ## Signs a file
            param([string] $file=$(throw "Please specify a filename."))
            $cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
            Set-AuthenticodeSignature $file $cert


    Add-Signature.ps1 스크립트 파일에 서명하려면 Windows PowerShell 명령 프롬프트에서 다음 명령을 
    입력하십시오. 

        $cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
    
        Set-AuthenticodeSignature add-signature.ps1 $cert


    이 스크립트에 서명한 후에는 로컬 컴퓨터에서 해당 스크립트를 실행할 수 있습니다. 그러나 
    Windows PowerShell 실행 정책이 신뢰할 수 있는 기관의 디지털 서명을 요구하는 컴퓨터에서는 이 
    스크립트가 실행되지 않습니다. 이러한 컴퓨터에서 이 스크립트를 실행하려고 하면 다음과 같은 오류 
    메시지가 나타납니다.

        C:\remote_file.ps1 파일을 로드할 수 없습니다. 인증서의 서명을 확인할 수 없습니다.
        줄:1 문자:15
        + .\ remote_file.ps1 <<<<

    사용자가 작성하지 않은 스크립트를 실행할 때 이 메시지가 나타나면 해당 스크립트를 서명되지 않은 
    스크립트인 것처럼 취급하십시오. 코드를 검토하여 해당 스크립트가 신뢰할 수 있는 스크립트인지 
    확인하십시오.


 사용자 인증서에 강력한 개인 키 보호 사용 
 ----------------------------------------
    사용자 컴퓨터에 개인 인증서가 있으면 악의적인 프로그램이 사용자 대신 스크립트에 서명하여 
    Windows PowerShell에서 이러한 스크립트를 실행하도록 할 수 있습니다. 

    사용자 대신 자동으로 서명되는 것을 방지하려면 인증서 관리자(Certmgr.exe)를 사용하여 서명 
    인증서를 .pfx 파일로 내보내십시오. 인증서 관리자는 Microsoft .NET Framework SDK, 
    Microsoft Windows SDK 및 Internet Explorer 5.0 이상 버전에 포함되어 있습니다.

    인증서를 내보내려면

        1. 인증서 관리자를 시작합니다.
    
        2. PowerShell Local Certificate Root에서 발급한 인증서를 선택합니다.

        3. 내보내기를 클릭하여 인증서 내보내기 마법사를 시작합니다.

        4. "예, 개인 키를 내보냅니다."를 선택하고 다음을 클릭합니다.
    
        5. "강력한 보호 사용"을 선택합니다.

        6. 암호를 입력한 다음 이 암호를 다시 입력하여 확인합니다.

        7. 파일 이름 확장명이 .pfx인 파일 이름을 입력합니다.

        8. 마침을 클릭합니다.


    인증서를 다시 가져오려면

        1. 인증서 관리자를 시작합니다.

        2. 가져오기를 클릭하여 인증서 가져오기 마법사를 시작합니다.

        3. 내보내기 프로세스 중에 만든 .pfx 파일의 위치로 이동합니다.

        4. 암호 페이지에서 "강력한 개인 키 보호 사용"을 선택한 다음 인증서를 내보낼 때 지정한 
           암호를 입력합니다.

        5. 개인 인증서 저장소를 선택합니다.

        6. 마침을 클릭합니다.



 서명 만료 방지 
 --------------
     스크립트의 디지털 서명은 서명 인증서가 만료될 때까지 유효하거나 서명 인증서가 유효한 동안 
     스크립트가 서명되었음을 타임스탬프 서버에서 확인할 수 있는 한 유효합니다. 

     대부분의 서명 인증서는 1년 동안만 유효하기 때문에 타임스탬프 서버를 사용하면 사용자가 이후 몇 년 
     동안 스크립트를 사용할 수 있습니다. 


참고 항목
    about_Execution_Policies
    about_Profiles
    Get-ExecutionPolicy
    Set-ExecutionPolicy
    Set-AuthenticodeSignature
    "Introduction to Code Signing(코드 서명 소개)"(https://go.microsoft.com/fwlink/?LinkId=106296)