programing

Forms cookie 암호를 해독할 때 "암호화 작업 중 오류 발생

bestprogram 2023. 10. 9. 23:26

Forms cookie 암호를 해독할 때 "암호화 작업 중 오류 발생

를 웹 이 했습니다.
'암호화 작업오류가 발생했습니다.'

제가 몇 가지 조사를 해보았는데, 인증된 쿠키의 형태가 (웹호스트를 사용할 때 다른) 머신키에 바인딩되어 있는 것 같습니다.


이 문제를 해결할 수 있는 방법을 찾았지만 오류가 남아 있습니다.

:

/// <summary>
    /// This method removes a cookie if the machine key is different than the one that saved the cookie;
    /// </summary>
    protected void Application_Error(object sender, EventArgs e)
    {
        var error = Server.GetLastError();
        var cryptoEx = error as CryptographicException;
        if (cryptoEx != null)
        {
            FederatedAuthentication.WSFederationAuthenticationModule.SignOut();
            Global.Cookies.FormAuthenticated Cookie = new Global.Cookies.FormAuthenticated();
            Cookie.Delete();
            Server.ClearError();
        }
    }


스택 트레이스:

[CryptographicException: Error occurred during a cryptographic operation.]
   System.Web.Security.Cryptography.HomogenizingCryptoServiceWrapper.HomogenizeErrors(Func`2 func, Byte[] input) +115
   System.Web.Security.Cryptography.HomogenizingCryptoServiceWrapper.Unprotect(Byte[] protectedData) +59
   System.Web.Security.FormsAuthentication.Decrypt(String encryptedTicket) +9824926
   Archive_Template.Main.resolveLoginUser(String sessionKey) in f:\Archive_Template\Archive_Template\Main.aspx.cs:481
   Archive_Template.Main.OnPreInit(EventArgs e) in f:\Archive_Template\Archive_Template\Main.aspx.cs:52
   System.Web.UI.Page.PerformPreInit() +31
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +335

저도 같은 문제에 직면했습니다.방금 브라우저의 쿠키캐시 데이터를 모두 지웠더니 수정되었습니다.당신에게도 효과가 있기를 바랍니다.

문제를 해결하지 못한 사람이라면 웹.config에서 암호화/복호화를 위한 "machineKey" 항목이 누락되었습니다.

양식 auth를 사용하는 경우.예외를 잡고 사용자가 로그인하여 유효한 쿠키를 만들 수 있도록 허용할 때 로그아웃할 수 있습니다.

catch (CryptographicException cex)
{
    FormsAuthentication.SignOut();
}

이것도 방금 받았는데 데이터베이스에서 UserTokenCaches 테이블 항목을 삭제했습니다.

이것은 기계 키가 없기 때문인데, 기계 키는 암호화와 복호화를 수행하는 대칭 키로 사용됩니다.

IIS에서 기기를 설정하려면;

응용 프로그램으로 이동 -> 컴퓨터 키 -> 키 생성

ASP에서 만든 양식 인증 쿠키를 가져가려다가 이 문제가 발생했습니다.NET 2.0 앱을 사용하여 내부에서 암호를 해독합니다.NET4.5 Web API 프로젝트.해결책은 "compatibilityMode"라는 속성을 webapi의 web.config 파일 안에 있는 "machineKey" 노드에 추가하는 것이었습니다.

<machineKey 
...
compatibilityMode="Framework20SP2"/>

문서: https://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx

그리고 의사는 다음과 같이 해당 속성에 대해 허용된 값을 제시합니다.

  • 프레임워크 20SP1.이 값은 ASP를 지정합니다.NET은 ASP 버전에서 사용 가능했던 암호화 방법을 사용합니다.2.0 SP2 이전의 NET.서버에 의 버전이 있는 경우 웹 팜의 모든 서버에 이 값을 사용합니다.NET Framework 2.0 SP2 이전 버전.이 값은 응용 프로그램 Web.config 파일에 httpRuntime 요소의 targetFramework 특성이 "4.5"로 설정되지 않는 한 기본값입니다.
  • 프레임워크 20SP2. 이 값은 해당 ASP를 지정합니다.NET에서는 에 도입된 업그레이드된 암호화 방법을 사용합니다.NET Framework 2.0 SP2.모든 서버에 의 값이 있는 경우, 웹 팜의 모든 서버에 이 값을 사용합니다.NET Framework 2.0 SP2 이상이지만 적어도 하나에는 이 없습니다.NET Framework 4.5.
  • 프레임워크 45.ASP에 대한 암호화 기능이 향상되었습니다.NET 4.5가 적용됩니다.응용 프로그램 Web.config 파일의 httpRuntime 요소의 targetFramework 특성이 "4.5"로 설정된 경우 기본값입니다.

또 다른 옵션은 브라우저 설정에서 쿠키를 지우는 것이며 이를 통해 새 쿠키를 저장할 수 있습니다.

저도 새로운 솔루션을 개발하고 localhost에서 웹사이트를 실행할 때 이런 경험을 했습니다.기계키를 설정해도 아무런 차이가 없었지만 localhost의 쿠키를 모두 삭제하는 것만으로 문제가 해결되었습니다.

       protected void Application_Error(object sender_, CommandEventArgs e_)
    {
        Exception exception = Server.GetLastError();
        if(exception is CryptographicException)
        {
            FormsAuthentication.SignOut();
        }
    }

Global.asax.cs 에서 Forms 인증(login/비밀번호)을 사용하는 한 Global.asax의 오류 잡기에서.나를 위해 일했습니다.

Single Sign On을 구현할 때 이 오류가 발생하는 경우(여기 http://www.alexboyang.com/2014/05/28/sso-for-asp-net-mvc4-and-mvc5-web-apps-shared-the-same-domain/), 에 설명되어 있듯이) 모든 프로젝트에서 동일한 목표 프레임워크를 사용해야 합니다.한가지 프로젝트가 있었습니다.NET 4.0과 나머지는 on입니다.NET 4.5.2.

첫 번째 것을 4.5.2로 변경하여 문제가 해결되었습니다.

위조방지 토큰을 검증할 때 암호화 오류가 발생했습니다.

가상 메모리 제한이 1,000,000 킬로바이트에 달했을 때 재활용할 수 있도록 애플리케이션 재활용을 구성하기 위해 서버에 대한 보안 제어 구성 변경을 얼마 전에 수행했기 때문인 것 같습니다.

이는 가상 메모리 재활용을 하기에는 분명히 너무 적었습니다.개인 메모리 사용량은 1,000,000KB로 설정할 수 있지만 가상 메모리는 훨씬 더 많은 공간을 제공해야 합니다.

애플리케이션이 너무 자주 재활용되고 있다는 것을 알게 되었습니다.

가상 메모리 제한을 10,000,000KB로 늘렸더니 오류가 사라졌습니다.제가 양식을 작성하는 과정에서 애플리케이션 풀이 재활용되고 있었던 것 같습니다.

요.<httpRuntime targetFramework="4.7.2"/>호환성 문제를 야기합니다.이 에서 targetFramework"4.7.2" 변수를 .<httpRuntime targetFramework="4.7.2"/>가 webApi안 web.config를 .<httpRuntime targetFramework="4.7.2"/>를 추가하는 것이 가 있었습니다WebApi에서 매개변수를 제거하거나 응용프로그램에서 매개변수를 추가하는 것이 효과적이었습니다.

저도 MVC 5 ASP와 같은 문제가 있었습니다.Net Web Application .net Framework 4.6.1

해결책:

  1. App_Data 폴더(솔루션 탐색기)로 이동
  2. NAME.mdf를 두 번 누릅니다(이 작업을 수행하면 Server Explorer 탭이 열립니다).
  3. UserTokenCaches 테이블에서 마우스 오른쪽 버튼을 클릭하고 테이블 데이터 표시
  4. 행 삭제
  5. 앱을 다시 실행하면 모든 것이 잘 될 것입니다.

누군가가 암호화 알고리즘을 DES(아주 오래된 암호화 표준)로 바꾸기로 결정했을 때 이 문제가 있었습니다.AES(더 현대적인 암호화 표준)로 다시 이동하면 오류가 해결됩니다.

그룹 정책이 DES를 사용하지 않도록 설정하는 것과 관련이 있을 수 있습니다.

암호화 알고리즘은 시스템 키 섹션(IIS 포함)에 숨겨져 있습니다.web.config에서도 설정하는 방법이 있을 것입니다.

언급URL : https://stackoverflow.com/questions/25857577/error-occurred-during-a-cryptographic-operation-when-decrypting-forms-cookie