SharePoint 응용 프로그램과 서비스 공급자간에 통합 서비스를 생성해야했습니다. 통합 할 서비스 공급자의 요구 사항 중 하나는 개인 키를 사용하여 서명 한 내 요청을 확인하는 데 사용할 공개 키를 제공하는 것입니다.키 세트가 존재하지 않습니다/r/n
처음에는 인증서 저장소를 읽고 내 요청에 모두 서명하는 데 사용할 개인 키를 가져 오는 콘솔 앱을 만들었습니다. 콘솔 응용 프로그램이 제대로 작동하므로 SharePoint 응용 프로그램 내에서 지금 이동하기로 결정했습니다. 불행하게도이 코드의 특정 부분에서 실패
는key.FromXmlString(privateCert.PrivateKey.ToXmlString(true));
을 체결 인증서를 얻고 수행하는 전체 코드는 아래에서 찾을 수 있습니다
X509Certificate2 privateCert = null;
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.MaxAllowed);
var certs = store.Certificates.Find(X509FindType.FindByThumbprint, "thumbprinthere", true);
if (certs.Count > 0)
{
privateCert = certs[0];
}
RSACryptoServiceProvider key = new RSACryptoServiceProvider();
key.FromXmlString(privateCert.PrivateKey.ToXmlString(true));
byte[] sig = key.SignData(Encoding.ASCII.GetBytes(data), CryptoConfig.MapNameToOID("SHA256"));
string signature = Convert.ToBase64String(sig);
[업데이트]
이 link의 단계를 따라 시도해 보았습니다. 먼저 서버에서 기존 개인 키를 제거했습니다. 그런 다음 인증서 저장소로 다시 가져 와서 지문 속성이 있는지 확인했습니다. 그 후 findprivatekey.exe를 실행하고 MachineKeys 폴더로 이동할 수있었습니다. 거기에서 나는 네트워크 서비스, IIS_IUSRS 그리고 SPFarm 관리자뿐만 아니라 서버에 로그인하는 데 사용 된 로컬 계정까지 다양한 사용자를 추가했지만 여전히 오류가 계속 발생합니다.
또한 내가 추가 한 키가 내보낼 수 있도록하여 응용 프로그램이 인증서에 첨부 된 개인 키를 추출 할 수있는 방법이 있어야합니다. 그냥 내가 개인 키를 추출하기 위해 사용 된 변수에 할당하기 전에 하나의 인증서를 반환하도록
[UPDATE 2]
나는 코드를 업데이트했습니다. certs
변수가 정확히 하나의 레코드를 반환하고 있음을 알 수 있더라도 여전히 동일한 문제입니다.
더 자세히 설명해 주시겠습니까? 덕분에 – aghilpro
RunWithElevatedPrivileges 메서드 내 코드 블록을 추가했습니다. 기본적으로 사용자가 모든 권한을 가지지 않아도 모든 권한이있는 코드 블록이 실행됩니다. MSDN에 따르면 RunWithElevatedPrivileges는 응용 프로그램 풀 ID 아래에 포함 된 메서드를 실행합니다. 앱 풀에 인증서에 대한 액세스 권한을 부여 했으므로 승격 된 권한으로 코드 블록을 실행하면 인증서의 개인 키에 액세스 할 수있는 충분한 권한을 얻을 수있었습니다. –