bcrypto / btls

TLS with additional ciphersuites
2 stars 1 forks source link

Ошибка "md too weak" при использовании самостоятельно сгенерированных сертификатов #9

Closed D0R1K closed 2 months ago

D0R1K commented 3 months ago

Пытаюсь использовать свои (подписанные другим сертификатом) сертификаты для создания сервера, генерирую их следующим образом:

Root CA 1)

openssl genpkey -algorithm bign -pkeyopt params:bign-curve256v1 -outform PEM -out ./ca/root.key

2)

openssl req -x509 -new -utf8 -key ./ca/root.key -out ./ca/root.crt -days 7300 \
-subj "/C=BY/O=Very Serious Organization/CN=Root CA" \
-addext "keyUsage = critical, digitalSignature, keyCertSign"

TLS server 1)

openssl genpkey -algorithm bign -pkeyopt params:bign-curve256v1 -outform PEM -out ./users/server.key

2)

openssl req -new -utf8 -key ./users/server.key -out ./users/server.csr \
-subj "/C=BY/description=Developer TLS-server /CN=tls.local"

3)

openssl x509 -req -in ./users/server.csr \
-CA ./ca/root.crt -CAkey ./ca/root.key -CAcreateserial \
-out ./users/server.crt -outform PEM -days 3600 \
-extfile ./profiles/tls-server.profile.conf -extensions req_ext

и при попытке запуска сервера

openssl s_server -key server.key -cert server.crt -cipher DHE-BIGN-WITH-BELT-CTR-MAC-HBELT -tls1_2 -accept 127.0.0.1:8888

получаю ошибку

error setting certificate
138743705242496:error:0909006C:PEM routines:get_name:no start line:../../openssl/crypto/pem/pem_lib.c:745:Expecting: DH PARAMETERS
138743705242496:error:140AB18E:SSL routines:SSL_CTX_use_certificate:ca md too weak:../../openssl/ssl/ssl_rsa.c:301:

Когда использую сертификат cert256.pem и ключ priv256.key из btls/server/btls256, сервер запускается.

Сгенерированные сертификаты и ключи: root.key:

-----BEGIN PRIVATE KEY-----
MD8CAQAwGAYKKnAAAgAiZS0CAQYKKnAAAgAiZS0DAQQgLiyH3ZorIMwsvCVYGH6b
05LlPMnV0AVeyBeIFN8BD/k=
-----END PRIVATE KEY-----

root.crt:

-----BEGIN CERTIFICATE-----
MIIB3jCCAZigAwIBAgIUOGEqyfXoS8KMhEM4GkI5C5z5+9gwDQYJKnAAAgAiZS0M
BQAwQzELMAkGA1UEBhMCQlkxIjAgBgNVBAoMGVZlcnkgU2VyaW91cyBPcmdhbml6
YXRpb24xEDAOBgNVBAMMB1Jvb3QgQ0EwHhcNMjQwNjIxMDUxNTE1WhcNNDQwNjE2
MDUxNTE1WjBDMQswCQYDVQQGEwJCWTEiMCAGA1UECgwZVmVyeSBTZXJpb3VzIE9y
Z2FuaXphdGlvbjEQMA4GA1UEAwwHUm9vdCBDQTBdMBgGCipwAAIAImUtAgEGCipw
AAIAImUtAwEDQQBF1S2dG1hlrnNm+idBjhYOF9MhrQOHfFEFAaTrIUQts5yocAU9
gTKg91K62FhQ2/luGNdeBXA3WF0ZJ/EnHeIno2MwYTAdBgNVHQ4EFgQUaB3KHVTf
9WN/t7NwC38/YnFVYncwHwYDVR0jBBgwFoAUaB3KHVTf9WN/t7NwC38/YnFVYncw
DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAoQwDQYJKnAAAgAiZS0MBQAD
MQCSm1yWyRGPj5c4YVc75R3zBhbtHofsk3QwAdkRPT/l3XWM/mjQrtN/oGrcRAWu
/7Q=
-----END CERTIFICATE-----

server.key:

-----BEGIN PRIVATE KEY-----
MD8CAQAwGAYKKnAAAgAiZS0CAQYKKnAAAgAiZS0DAQQgsX55LQH9sxiHvOdGitNj
tQgF7MpqcCEFWjMqVxpvPSg=
-----END PRIVATE KEY-----

server.crt:

-----BEGIN CERTIFICATE-----
MIIB8TCCAaugAwIBAgIUYodF44VJiydLw9UpqpaeW1ViwCMwDQYJKnAAAgAiZS0M
BQAwQzELMAkGA1UEBhMCQlkxIjAgBgNVBAoMGVZlcnkgU2VyaW91cyBPcmdhbml6
YXRpb24xEDAOBgNVBAMMB1Jvb3QgQ0EwHhcNMjQwNjIxMDUxNTQ0WhcNMzQwNDMw
MDUxNTQ0WjBHMQswCQYDVQQGEwJCWTEkMCIGA1UEDQwbRGV2ZWxvcGVyIFRMUy1z
ZXJ2ZXIgTklJVFpJMRIwEAYDVQQDDAl0bHMubG9jYWwwXTAYBgoqcAACACJlLQIB
BgoqcAACACJlLQMBA0EAOl9aBvpGJJ3oKULa3OymOIC8i8rtqzlQ+P28T/wqJbPw
NThph1A7azTFrEDApVP9AMUTGs2tmPsnlXZ/iE/HRqNyMHAwHQYDVR0OBBYEFFMx
5GMxLmMtjC5SEXOS/lUztwooMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgO4MBMGA1Ud
JQQMMAoGCCsGAQUFBwMBMCIGA1UdEQQbMBmCCyoudGxzLmxvY2FshwR/AAABhwTA
qA+JMA0GCSpwAAIAImUtDAUAAzEABXztDYOWAfkGLauBcDHVBgeeRb0fcOnehqhs
HBsyizTxOTLAEEvNS4P3+B6GXRaZ
-----END CERTIFICATE-----
D0R1K commented 3 months ago

я могу запустить сервер, используя сгенерированные root.crt и root.key, но получаю ошибку "md too weak" при использовании сертификатов, подписанных этим root

blackbearman commented 3 months ago

Проблему получилось воспроизвести на окружении btls256

D0R1K commented 2 months ago

Исправил проблему путём изменения результатов проверки. В файле ssl_cert.c в функциях

int ssl_security(const SSL *s, int op, int bits, int nid, void *other)
int ssl_ctx_security(const SSL_CTX *ctx, int op, int bits, int nid, void *other)

добавил

    if (bits == -1)
    {
        bits = 256;
    }

В результате сервер поднимается, к нему возможно подключиться, однако метод решения не годится для постоянного использования...

agievich commented 2 months ago

Предположительно должны помочь изменения в Bee2evp.

Предположительная причина проблемы: https://github.com/bcrypto/bee2evp/blob/edb50454588a135da91969516850bf1bb3814ef3/src/bee2evp.c#L120.

Помогает ли предложенное решение?

D0R1K commented 2 months ago

Большое спасибо, теперь работает