Подпрограммы PEM: PEM_read_bio: плохая конечная строка

Я пытаюсь проанализировать сертификат разработчика в файле embedded.mobileprovision. Во-первых, я использую

security cms -D -i embedded.mobileprovision

для получения строки сертификата разработчика base64.

Затем я разбил строку каждые 64 символа и сохранил файл с именем dev.cer.

Наконец, добавьте -----BEGIN CERTIFICATE----- в первой строке и -----END CERTIFICATE----- в конце файла.

На моем компьютере Mac я щелкаю правой кнопкой мыши файл dev.cer, и информация о разработчике все есть. Однако, когда я использую openssl x509 -in dev.cer -text -noout, появляется ошибка:

unable to load certificate
69721:error:0906D066:PEM routines:PEM_read_bio:bad end line:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.50.6/src/crypto/pem/pem_lib.c:747:

Файл dev.cer выглядит следующим образом:

-----BEGIN CERTIFICATE-----
MIIFljCCBH6gAwIBAgIIIP7GMO9cWzYwDQYJKoZIhvcNAQELBQAwgZYxCzAJBgNV
BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
HhcNMTcwNDI5MDMzMDA4WhcNMTgwNDI5MDMzMDA4WjCBiTEaMBgGCgmSJomT8ixk
AQEMCk1ENFA0UTg1WlExMzAxBgNVBAMMKmlQaG9uZSBEZXZlbG9wZXI6IGFtbW1p
IGFtbW1pIChXM1BSS1JDVDRRKTETMBEGA1UECwwKVktRNTZVQ0c4ODEUMBIGA1UE
CgwLYW1tbWkgYW1tbWkxCzAJBgNVBAYTAlVTMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAwudboPuPnImOssBCw9vISRnnivreVwOuDAu77u47zIU8uTag
bzktX6pF54YToSLQHeOaNNQfZ7idccU2DKVBr3etz/++ca4HNadeUaEm2VWW4kEq
3iKIo1wZZhJJR6bQl4q797U0+f7eEXLKD4fjfidEF+ceAxAsX5YIuokq3K/B+XW3
tKk7D4nCaaCyJ9/+aJkFKT/oOxWRD0NYi5vXpni/3Plj5Qu3kDGrTUQaGCXXjRrA
E3mOVS4M2W5sFoOUpBxcfK7ajs+HUZNp0Gvb04OeD4O0lLTxcNu6omhG3MzOo81F
T+bkdxLM7XkIbNlIjYhyxGRynpgAKmiR9B/oeQIDAQABo4IB8TCCAe0wPwYIKwYB
BQUHAQEEMzAxMC8GCCsGAQUFBzABhiNodHRwOi8vb2NzcC5hcHBsZS5jb20vb2Nz
cDAzLXd3ZHIwMTAdBgNVHQ4EFgQUF8T1dPnBmZfKfG0+lHtczMuGy9owDAYDVR0T
AQH/BAIwADAfBgNVHSMEGDAWgBSIJxcJqbYYYIvs67r2R1nFUlSjtzCCAR0GA1Ud
IASCARQwggEQMIIBDAYJKoZIhvdjZAUBMIH+MIHDBggrBgEFBQcCAjCBtgyBs1Jl
bGlhbmNlIG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3VtZXMg
YWNjZXB0YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJkIHRlcm1z
IGFuZCBjb25kaXRpb25zIG9mIHVzZSwgY2VydGlmaWNhdGUgcG9saWN5IGFuZCBj
ZXJ0aWZpY2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudHMuMDYGCCsGAQUFBwIBFipo
dHRwOi8vd3d3LmFwcGxlLmNvbS9jZXJ0aWZpY2F0ZWF1dGhvcml0eS8wDgYDVR0P
AQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMDMBMGCiqGSIb3Y2QGAQIB
Af8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQA1//RUQ+hnCxfzSKO13qtuSb4IUrY5
bjkRKIAUlxN5aYVN5NIzCGxmahlDA/Rjw8MLVA8dWbT0QMSqx5IXC+Ov3JNZlkL0
5+RBuZEtZL7IZp0L3ZrCFtuizaunH9fZWbyFyfLACIYqZqP40N1+wIx1l4Es65Zu
WSeDeQMutda8DpmtCJhrnod9B1vfvDc3FUSmbJbvkLFh2UCgqtE9moLYI8qFMzqe
CQUJdPGdE+2WNv0wM8/cFIG/audSvEADKg1DgO+j6oP+urUe1gLsyzyv10J7/XA4
nmDuP1UNG7O7ADbdEOxhRiB96ZNwgcw9Q0wv9H9jMa+NNti6SxLud2+B
-----END CERTIFICATE----

Кстати, я использовал онлайн-декодер для декодирования dev.cer, он работает хорошо. Вот URL:

https://www.sslshopper.com/certificate-decoder.html

Этот сайт рекомендовал использовать openssl, но он не удался.

Ответ 1

У меня была такая же проблема, как солнечные лучи, и его комментарий был прав. Мне не хватало "-" в самом конце последней строки файла. До того, как я:

-----END CERTIFICATE----

и изменить его на:

-----END CERTIFICATE-----

починил это. Я узнал, что должен быть осторожным при копировании сертификатов с терминала.

Ответ 2

Замечание: если файл pem содержит CA и суб-CA-цепочку, убедитесь, что -----END CERTIFICATE---- -----BEGIN CERTIFICATE---- - не находятся на одной строке.

Ответ 3

tl; dr должно быть пять тире ----- вокруг тегов BEGIN и END.

Форматирование сертификата

Убедитесь, что содержимое каждого сертификата окружено тегами BEGIN и END например:

-----BEGIN CERTIFICATE-----
bGlhbmNlIG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3VtZXMg
-----END CERTIFICATE-----

Обратите внимание: в соответствии с официальным документом RFC 7468 о текстовом кодировании сертификатов должны быть:

  • ровно пять штрихов ----- в начале строки и пять штрихов ----- в конце. (Поэтому убедитесь, что вы не пропустили одну черту случайно при копировании!)

  • и поэтому нет двух границ инкапсуляции на одной линии, например: ----END CERTIFICATE----------BEGIN CERTIFICATE-----. (Таким образом, окончание и непосредственный запуск нового сертификата на той же строке не будет работать, потому что тогда будет десять вместо пяти тире.)

Правильно добавлять сертификаты в один файл

Некоторым веб-серверам нужны все сертификаты SSL/TLS (root, промежуточный и конечный пользователь) в одном файле, но CA обычно отправляют все сертификаты отдельно. Для правильного объединения всех сертификатов вы можете использовать следующую команду:

cat end-user.crt <(echo) intermediate.pem <(echo) root.crt > bundled.crt

Просто замените end-user.crt, intermediate.pem и root.crt с вашими именами файлов.

Обратите внимание: заказ сертификатов важен! Начните с сертификата конечного пользователя, затем всех промежуточных сертификатов и завершите корневым сертификатом.

Кстати, .pem и .crt являются действительными окончаниями/кодировками файлов сертификатов SSL.

Вы можете найти больше о файлах SSL здесь.

Ответ 4

друзья, пожалуйста!

НЕ ИСПОЛЬЗУЙТЕ "cat AddTrustExternalCARoot.crt COMODORSAAddTrustCA.crt COMODORSADomainValidationSecureServerCA.crt>/tmp/commercial_ca.crt..

это создает WRONG.crt файлы..

просто.

1 как root Скопируйте и вставьте сертификат в текстовый файл (save as commercial.crt) с помощью Vi, nano или Notepad. Поместите этот файл в следующий каталог /opt/zimbra/ssl/zimbra/commercial/

2 как root. Откройте CAbundle, который вы получили в ZIP файле, используя текстовый редактор nano или Vi и сохраните его как (commercial_ca.crt). Поместите этот файл в следующий каталог /opt/zimbra/ssl/zimbra/commercial/

проверить, как пользователь Zimbra в /Opt/Zimbra/SSL/Zimbra/коммерческая/

/opt/zimbra/bin/zmcertmgr verifycrt comm commercial.key commercial.crt commercial_ca.crt

развертывать как пользователь Zimbra в /tmp/

/opt/zimbra/bin/zmcertmgr deploycrt comm commercial.crt commercial_ca.crt

а также

zmcontrol restart

Получать удовольствие! от https://ssl.comodo.com/support/certificate-installation---zimbra-server.php

  • в случае, если вы получили ошибки разрешений, убедитесь, что у вас есть файлы *.crt.

chown zimbra.zimbra/opt/zimbra/ssl/zimbra/commercial/*.crt (как корень)

chmod 700/opt/zimbra/ssl/zimbra/commercial/*.crt (как пользователь zimbra)

Ответ 5

Он работает следующим образом: tls.crt

-----BEGIN CERTIFICATE-----
the content of certificate.crt
the content of ca_bundle.crt
-----END CERTIFICATE-----

Ответ 6

У меня была та же проблема (то же сообщение об ошибке) при сохранении закрытого ключа (чтобы подписать письмо в swiftmailer). Это работало и вдруг перестало работать.

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

enter image description here.

Ответ 7

У меня также была похожая проблема при копировании сертификатов с компьютера Windows на RHEL 7. Кажется, что промежуточный и корневой сертификаты имеют "^ M" в конце каждой строки, что видно только при просмотре сертификата в vim.

Обходной путь, который я нашел, состоял в том, чтобы отредактировать сертификаты и запустить vim:

:% S/^ M $//

Это удалит все ^ M в конце каждой строки.

(чтобы получить ^ M, вам нужно будет удерживать Ctrl + Shift, а затем v и m последовательно)

Ответ 8

Если вы сгенерируете файл crt с помощью приведенной ниже команды, это сгенерирует неверный вывод.

cat yourdomain.crt yourdomain.ca-bundle >> cert_chain.crt

Что нужно сделать, скопируйте содержимое файла и вставьте его вручную.

-----BEGIN CERTIFICATE-----
the content of yourdomain.crt
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
the content of yourdomain.ca_bundle.crt
-----END CERTIFICATE-----

После завершения проверьте его с помощью следующей команды

openssl x509 -text -noout -in cert_chain.crt