Как конвертировать сертификат DSA в сертификат RSA? - PullRequest
0 голосов
/ 01 октября 2019

Я работаю над разработкой программного обеспечения Keystore для Java и Scala. Теперь у меня есть инструмент для управления сертификатами открытых ключей. Но он поддерживает только сертификаты типа RSA, а не тип DSA. Я хочу преобразовать сертификаты типа DSA в тип RSA.

Это образец сертификата, который я пытался преобразовать в RSA, и он был сохранен в файле с именем "httpKey.cer" .

MIIEvDCCBGegAwIBAgIEKSCcaDANBglghkgBZQMEAwIFADBgMQswCQYDVQQGEwJMSzELMAkGA1UE
CBMCV1AxETAPBgNVBAcTCEtlbGFuaXlhMQwwCgYDVQQKEwNVb0sxCzAJBgNVBAsTAklNMRYwFAYD
VQQDEw1Eb24gTmFkZWVzaGFuMB4XDTE5MDkxNzA2MTcwMFoXDTE5MTIxNjA2MTcwMFowYDELMAkG
A1UEBhMCTEsxCzAJBgNVBAgTAldQMREwDwYDVQQHEwhLZWxhbml5YTEMMAoGA1UEChMDVW9LMQsw
CQYDVQQLEwJJTTEWMBQGA1UEAxMNRG9uIE5hZGVlc2hhbjCCA0IwggI1BgcqhkjOOAQBMIICKAKC
AQEAj3k12bmq6b+r7Yh6z0lRtvMuxZ47rzcY6OrElh8+/TYG50NRqcQYMzm4CefCrhxTm6dHW4XQ
Ea24tHmHdUmEaVysDo8UszYIKKIv+icRCj1iqZNFNAmg/mlsRlj4S90ggZw3CaAQV7GVrc0AIz26
VIS2KR+dZI74g0SGd5ec7AS0NKasLnXpmF3iPbApL8ERjJ/6nYGB5zONt5K3MNe540lZL2gJmHIV
ORXqPWuLRlPGM0WPgDsypMLg8nKQJW5OP4o7CDihxFDk4YwaKaN9316hQ95LZv8EkD7VzxYj4VjU
h8YI6X8hHNgdyiPLbjgHZfgi40K+SEwFdjk5YBzWZwIdALr2lqaFePff3uf6Z8l3x4XvMrIzuuWA
wLzVaV0CggEAFqZcWCBIUHBOdQKjl1cEDTTaOjR4wVTU5KXALSQu4E+W5h5L0JBKvayPN+6x4J8x
gtI8kEPLZC+IAEFg7fnKCbMgdqecMqYn8kc+kYebosTnRL0ggVRMtVuALDaNH6g+1InpTg+gaI4y
QopceMR4xo0FJ7ccmjq7CwvhLERoljnn08502xAaZaorh/ZMaCbbPscvS1WZg0u07bAvfJDppJbT
pV1TW+v8RdT2GfY/Pe27hzklwvIk4HcxKW2oh+weR0j4fvtf3rdUhDFrIjLe5VPdrwIRKw0fAtow
lzIk/ieu2oudSyki2bqL457Z4QOmPFKBC8aIt+LtQxbh7xfb3gOCAQUAAoIBABo0NJVwoerbaF1d
ME62AJgTOjoFTzIpFxdHPTIEYCFnc3j+99eHnPT79NxOB72eG7mgV5tQe/vXGNKtv5MSZDflFDn6
dYAFVKNU3gC18YSDnBJ6cH/LF5csXPUe/MVWt7Y8TVhO/22LZhcdBtZL1pq6/JgBd2N8HNfl3jcB
u3cXMos6CQtd1icSFVRhXOOyIo9VImA8vUm0j+zeFHctHM8b4m0+suxk/dYeESBrNRo/iIhfGBY5
IDqzL4RBTOGso+pcCO0qCDozQ1E3X/3o4Q1gvGBOUfosLTN+2iixzSmeCkjddoMWDTxztPsBRBJ6
rQoyDECfiDBUYRLcpsCXIxGjITAfMB0GA1UdDgQWBBQCzMwaOQ5+Rsttvw3GSldakDrq4DANBglg
hkgBZQMEAwIFAANAADA9AhxKp4yIsBegnjybch8eSygy/ge+qae72lxZ+ZFgAh0Am1wEcuvak+hT
+uwrytUhuZx6DZwA/Gl39Ew3Tg==

Это содержимое вышеуказанного сертификата.

Version: V3
  Subject: CN=Don Nadeeshan, OU=IM, O=UoK, L=Kelaniya, ST=WP, C=LK
  Signature Algorithm: SHA256withDSA, OID = 2.16.840.1.101.3.4.3.2

  Key:  Sun DSA Public Key
    Parameters:DSA
    p:     8f7935d9 b9aae9bf abed887a cf4951b6 f32ec59e 3baf3718 e8eac496 1f3efd36
    06e74351 a9c41833 39b809e7 c2ae1c53 9ba7475b 85d011ad b8b47987 75498469
    5cac0e8f 14b33608 28a22ffa 27110a3d 62a99345 3409a0fe 696c4658 f84bdd20
    819c3709 a01057b1 95adcd00 233dba54 84b6291f 9d648ef8 83448677 979cec04
    b434a6ac 2e75e998 5de23db0 292fc111 8c9ffa9d 8181e733 8db792b7 30d7b9e3
    49592f68 09987215 3915ea3d 6b8b4653 c633458f 803b32a4 c2e0f272 90256e4e
    3f8a3b08 38a1c450 e4e18c1a 29a37ddf 5ea143de 4b66ff04 903ed5cf 1623e158
    d487c608 e97f211c d81dca23 cb6e3807 65f822e3 42be484c 05763939 601cd667
    q:     baf696a6 8578f7df dee7fa67 c977c785 ef32b233 bae580c0 bcd5695d
    g:     16a65c58 20485070 4e7502a3 9757040d 34da3a34 78c154d4 e4a5c02d 242ee04f
    96e61e4b d0904abd ac8f37ee b1e09f31 82d23c90 43cb642f 88004160 edf9ca09
    b32076a7 9c32a627 f2473e91 879ba2c4 e744bd20 81544cb5 5b802c36 8d1fa83e
    d489e94e 0fa0688e 32428a5c 78c478c6 8d0527b7 1c9a3abb 0b0be12c 44689639
    e7d3ce74 db101a65 aa2b87f6 4c6826db 3ec72f4b 5599834b b4edb02f 7c90e9a4
    96d3a55d 535bebfc 45d4f619 f63f3ded bb873925 c2f224e0 7731296d a887ec1e
    4748f87e fb5fdeb7 5484316b 2232dee5 53ddaf02 112b0d1f 02da3097 3224fe27
    aeda8b9d 4b2922d9 ba8be39e d9e103a6 3c52810b c688b7e2 ed4316e1 ef17dbde

  y:
    1a343495 70a1eadb 685d5d30 4eb60098 133a3a05 4f322917 17473d32 04602167
    7378fef7 d7879cf4 fbf4dc4e 07bd9e1b b9a0579b 507bfbd7 18d2adbf 93126437
    e51439fa 75800554 a354de00 b5f18483 9c127a70 7fcb1797 2c5cf51e fcc556b7
    b63c4d58 4eff6d8b 66171d06 d64bd69a bafc9801 77637c1c d7e5de37 01bb7717
    328b3a09 0b5dd627 12155461 5ce3b222 8f552260 3cbd49b4 8fecde14 772d1ccf
    1be26d3e b2ec64fd d61e1120 6b351a3f 88885f18 1639203a b32f8441 4ce1aca3
    ea5c08ed 2a083a33 4351375f fde8e10d 60bc604e 51fa2c2d 337eda28 b1cd299e
    0a48dd76 83160d3c 73b4fb01 44127aad 0a320c40 9f883054 6112dca6 c0972311

  Validity: [From: Tue Sep 17 11:47:00 IST 2019,
               To: Mon Dec 16 11:47:00 IST 2019]
  Issuer: CN=Don Nadeeshan, OU=IM, O=UoK, L=Kelaniya, ST=WP, C=LK
  SerialNumber: [    29209c68]

Certificate Extensions: 1
[1]: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 02 CC CC 1A 39 0E 7E 46   CB 6D BF 0D C6 4A 57 5A  ....9..F.m...JWZ
0010: 90 3A EA E0                                        .:..
]
]

]
  Algorithm: [SHA256withDSA]
  Signature:
0000: 30 3D 02 1C 4A A7 8C 88   B0 17 A0 9E 3C 9B 72 1F  0=..J.......<.r.
0010: 1E 4B 28 32 FE 07 BE A9   A7 BB DA 5C 59 F9 91 60  .K(2.......\Y..`
0020: 02 1D 00 9B 5C 04 72 EB   DA 93 E8 53 FA EC 2B CA  ....\.r....S..+.
0030: D5 21 B9 9C 7A 0D 9C 00   FC 69 77 F4 4C 37 4E     .!..z....iw.L7N

Я прочитал файл сертификата, используя следующий код.

import java.io.File;
import java.io.FileInputStream;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;

public class ReadCertificate {

    public static void main(String[] args) throws Exception{

        File inputFile = new File("src/main/java/certificates/httpKey.cer");
        FileInputStream fileInputStream = new FileInputStream(inputFile);
        CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
        Certificate certificate = certificateFactory.generateCertificate(fileInputStream);

        System.out.println(certificate.toString());
    }
}

1 Ответ

1 голос
/ 01 октября 2019

Вы не можете преобразовать существующий сертификат, поскольку он уже выпущен и подписан вашим эмитентом CN=Don Nadeeshan, OU=IM, O=UoK, L=Kelaniya, ST=WP, C=LK. Подпись эмитента делает его неизменным.

Поскольку эмитент и субъект совпадают, это самозаверяющий сертификат. Вам нужно будет сгенерировать новую пару открытых / закрытых ключей RSA с теми же данными, что и у старой, а затем подписать ее самостоятельно.

...