문제

우리 회사에는 웹 문서 관리 응용 프로그램이 있으며 사용자 디지털 인증서와 함께 PDF 파일에 서명 할 수있는 방법을 찾도록 할당되었습니다.

PDFS는 몇 kb에서 100MB 이상으로 이동할 수 있습니다. 이것은 인터넷을 통해 서명이 있습니다. ~ 해야 하다 웹 서버에서 발생합니다.

이를 위해서는 사용자에게 인증서를 선택하도록 요청하는 ActiveX 컨트롤을 구축 한 다음 WebClient.uploadData를 사용하여 인증서를 바이트 배열로 보내는 웹 페이지에 업로드합니다.

PDF 문서에 서명하려고 할 때 웹 페이지에서 "키가 존재하지 않는다"는 오류가 발생합니다. 적절한 인증서를 선택한 후 HTTPS 연결을 통해 직접 인증서를 사용할 때 키가 프롬프트되기 때문에 이것은 놀라운 일이 아닙니다. 이것은 ActiveX에서 일어나지 않습니다.

이것이 제가 사용자로부터 인증서를받는 방법입니다.

private static X509Certificate2 PickCertificate()
        {
            X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
            try
            {
                store.Open(OpenFlags.ReadOnly);

                // pick a certificate from the store
                X509Certificate2 cert = X509Certificate2UI.SelectFromCollection(store.Certificates, "Title", "Message", X509SelectionFlag.SingleSelection)[0];

                // show certificate details dialog
                X509Certificate2UI.DisplayCertificate(cert);
                store.Close();
                return cert;
            }
            finally { store.Close(); }
        }

누락 된 키를 제공하도록 사용자에게 어떻게 요청할 수 있습니까?

도움이 되었습니까?

해결책

사용자가 PDF에 서명 할 수 있도록 인증서의 개인 키를 웹 서버에 업로드하기를 원하십니까? 그렇다면 보안 관점에서 근본적으로 깨졌습니다.

공개 인증서를 놓쳤을 것입니다! = 개인 키. (우리 대부분은 조잡하고 "인증서"라는 단어를 사용하여 그 것들 중 어느 것 (또는 둘 다)을 사용하므로 완전히 놀라운 것은 아닙니다). 메모리에서 나오면 Cryptoapi에는 키에 액세스 할 수있는 선택된 메소드 세트 만 있습니다. 그 사이에 "PFX로서의 내보내기"방법이 있어야하므로 실제로 원한다면 디자인을 작동시킬 수 있지만이를 추천 할 방법은 없습니다. (개인 키를 웹 서버로 보낼 위험, 부패하지 않은 부패 등).

서버에서 서명을해야한다면 [실제로 당신의 주장을 이해하지 못하고 서명은 업로드에 많은 데이터를 추가해서는 안됩니다], 아마도 멀티 계층 아키텍처와 주요 에스크로 메커니즘을 고려해야합니다. 이렇게하면 적어도 일부 보안 문제를 최소화 할 수 있습니다 (그러나 여전히 반복되지 않음을 잃고 다른 위험을 소개합니다. 여기에는 무료 점심이 없습니다).

따라서 ... PDF 파일이 업로드되기 전에 클라이언트 (ActiveX Control에서)에서 PDF 서명이 발생하도록 응용 프로그램을 재건하는 것을 고려해야 할 것입니다. 논의 된대로 서명 단계를위한 제 3 자 라이브러리가 필요하다고 생각합니다. 이 스레드.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top