, 그것은이다 닷넷 3.5 응용 프로그램은 C#으로 작성되었습니다.문자열에서 닷넷에서 락스 공개 인증서를로드 (닷넷에서 X509 CERT는에 ASN.1 인코딩 SubjectPublicKeyInfo로 변환하는 방법)
는 락스 내가 X509Certificate의 인스턴스가 공개 인증서를 형성 만들 필요가 요청의 서명을 확인하는 의미 RSA-SHA1 서명 방법을 사용하여이 서비스에 요청을한다. JIRA의 응용 프로그램 내
당신은 (또한 등 락스에 대한 소비자의 키를 가지고있는) 소비자 정보 화면으로 이동하여 공개 인증서를 얻을 수 있으며이 형식의 공개 키를 제공합니다 :MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCObJRTGSZbAo
jRkvKmm0cwFXnKcPMfR4t/sghvLe/+QVs6TJOz5cUh5UokSqyz
VeMsL0jomP18ZcR3SPcIFT7xtOGQjLwLk7ghfYSsxjTGs9VxsC
/PQk5OQRP3v43IxFNF3M2SYhFWJZTOnqrab5AsMh2Kxdv+D69D
CINXCu5ltQIDAQAB
을 이 키를 생성하는 Jira 코드를 보면 BEGIN/END 인증서 머리글/바닥 글없이 (아마도) PEM으로 인코딩 된 것을 볼 수 있습니다.
내가 닷넷 내 X509Certificate의 인스턴스로 (키)이 공용 인증서를로드 할, 그러나 나의 시도는 지금까지 실패 :
RSAKeys.toPemEncoding(consumer.getPublicKey())
RSAKeys는 오픈 소스 클래스는 여기있다 .
static readonly Regex stripRegex = new Regex("-----[A-Z ]*-----");
public string ConvertFromOpenSsl(string key)
{
return stripRegex.Replace(key, "").Replace("\r", "").Replace("\n", "");
}
public X509Certificate2 GetConsumerCertificate(IConsumer consumer)
{
string cert =
@"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCObJRTGSZbAo
jRkvKmm0cwFXnKcPMfR4t/sghvLe/+QVs6TJOz5cUh5UokSqyz
VeMsL0jomP18ZcR3SPcIFT7xtOGQjLwLk7ghfYSsxjTGs9VxsC
/PQk5OQRP3v43IxFNF3M2SYhFWJZTOnqrab5AsMh2Kxdv+D69D
CINXCu5ltQIDAQAB";
string converted = ConvertFromOpenSsl(cert);
var bytes = Convert.FromBase64String(converted);
var cert = new X509Certificate2(bytes); // throws here
을하지만 코드의 마지막 줄에 내가 던진 예외가 : 여기에 코드를 내가 가진 것
System.Security.Cryptography.CryptographicException: Cannot find the requested object.
at System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException(Int32 hr)
at System.Security.Cryptography.X509Certificates.X509Utils._QueryCertBlobType(Byte[] rawData)
at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData, Object password, X509KeyStorageFlags keyStorageFlags)
at System.Security.Cryptography.X509Certificates.X509Certificate..ctor(Byte[] data)
at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData)
내가 초등학교 뭔가를 놓친 거지 확신을,하지만 난 그게 무엇을 생각할 수 입니다.
OK는 상기 조사에이 공개 키의 SubjectPublicKeyInfo로 직렬화하고, 그래서 ASN.1 있다는 표시 UPDATE는,베이스 (64) 중 디폴트 출력이다 (162 바이트 인코딩되지 않은) 코드 Java는 java.security.PublicKey.getEncoded()를 사용합니다.
그렇다면이 공개 키를 래핑하는 X509Certificate2 인스턴스를 만드는 쉬운 방법이 있습니까? 아니면 x509Certificate2 인스턴스를 만들기 위해 공개 키를 넘어서는 추가 메타 데이터가 필요합니까?