RSACryptoServiceProvider는 PKI나 XML 디지털 서명/검증 등과 같은 작업에 종종 이용되는 비대칭키 암호화 알고리즘 제공자이다. 그런데 이것을 그냥 쓰기에는 다음과 같은 예기치 못한 여러가지 문제가 있다.

 

 

1. RSACryptoServiceProvider를 생성하는 실행 계정은 사용자 프로필(C:\Documents and Settings\{사용자}\NTUSER.DAT)이 있어야 하며 또한 현재 로그온된 계정이어야 한다.

 

그런데 ASP.NET과 같이 NETWORK SERVICE를 기본적으로 사용하거나 또는 새 사용자를 등록하여 ASP.NET 실행 계정으로 등록하는 경우, 이 사용자 프로필이 없는 경우가 많다. 따라서 RSACryptoServiceProvider를 생성하여 사용하려고 하면 키를 얻을 수 없다는 에러가 발생하게 된다. 


==> 팁: Local System 계정으로 실행 중인 서비스 하나를 해당 계정으로 실행되도록 하면 간단히 해결된다.

==> 참고: http://support.microsoft.com/default.aspx?scid=kb;en-us;Q322371

 

 

2. 앞 1번 문제를 근본적으로 해결하기 위해 RSACryptoServiceProvider에서 사용하는 기본 키를 MachineKey로 설정하는 방법이 위 참고 사이트에 최근에 업데이트되어 게재되었다.

 

그런데, MachineKey를 기본 키 컨테이너로 사용하도록 변경하려면 해당 실행계정의 접근 권한이 필요하다. (기본적으로는 실행계정 자신의 사용자 프로필 정보를 쓰도록 되어 있기 때문에 이런 권한 문제가 발생하지 않았다.) 접근 권한을 주지 않고 변경한 후 실행하면 액세스가 거부되었다는 에러가 발생함을 알 수 있다.
 
MachineKey는 다음 폴더를 사용하므로 접근 권한을 주기 위해서는 다음 폴더에 NTFS 권한을 주면 된다.
 
C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys
 
위 폴더의 속성-보안탭에 실행계정(예: NETWORK SERVICE)를 등록하고 "모든 권한"을 주면 끝. (읽기 권한만 주면 안됨)





Posted by 떼르미
,


자바스크립트를 허용해주세요!
Please Enable JavaScript![ Enable JavaScript ]