OpenSSL: подпрограммы PEM: PEM_read_bio: нет стартовой строки: pem_lib.c: 703: Ожидание: ДОВЕРЕННЫЙ СЕРТИФИКАТ
Мне нужно хэш-имя для файла для публикации в каталоге Stunnel CApath. У меня есть несколько сертификатов в этом каталоге, и они работают хорошо. Также у меня есть серверный сервер и серверный ключ:
cert = c:\Program Files (x86)\stunnel\server_cert.pem
key = c:\Program> Files (x86)\stunnel\private\server_key.pem
Когда я пытаюсь вычислить хэш моего нового сертификата, я получаю сообщение об ошибке:
/etc/pki/tls/misc/c_hash cert.pem
unable to load certificate 140603809879880:error:0906D06C:PEM
routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE
Как я понимаю, я должен подписать свой сертификат, но я не понимаю, как я могу это сделать. Пожалуйста, предоставьте решение.
PS:
Сообщение
unable to load certificate 140603809879880:error:0906D06C:PEM
routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE:
опубликовал, когда я сделал c_hash для cert.pem Это не server_cert.pem, это Root_CA и это что-то вроде
-----BEGIN CERTIFICATE-----
...6UXBNSDVg5rSx60=..
-----END CERTIFICATE-----
Когда я пишу
openssl x509 -noout -text -in cert.pem
В панели консоли я вижу эту информацию:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=BE, ST=BB, L=BB, O=BANKSYS NV, OU=SCY, CN=TEST Root CA
Validity
Not Before: May 31 08:06:40 2005 GMT
Not After : May 31 08:06:40 2020 GMT
Subject: C=BE, ST=BB, L=BB, O=BB NV, OU=SCY, CN=TEST Root CA
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:82:c8:58:1e:e5:7a:b2:63:a6:15:bd:f9:bb:1f:
............
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints: critical
CA:TRUE
X509v3 Key Usage: critical
Certificate Sign, CRL Sign
X509v3 Subject Key Identifier:
76:70:AB:92:9B:B1:26:CE:9E:93:D8:77:4F:78:0D:B8:D4:6C:DA:C6
Signature Algorithm: sha1WithRSAEncryption
2c:7e:bd:3f:da:48:a4:df:8d:7c:96:58:f7:87:bd:e7:16:24:
...............
Ответы
Ответ 1
-
Поскольку вы работаете в Windows, убедитесь, что ваш сертификат в Windows "совместим", и самое главное, чтобы в конце каждой строки не было ^M
Если вы откроете его, оно будет выглядеть так:
-----BEGIN CERTIFICATE-----^M
MIIDITCCAoqgAwIBAgIQL9+89q6RUm0PmqPfQDQ+mjANBgkqhkiG9w0BAQUFADBM^M
Чтобы решить "это", откройте его с помощью функции " Write
или Notepad++ и попросите преобразовать его в "стиль" Windows.
-
Попробуйте запустить openssl x509 -text -inform DER -in server_cert.pem
и посмотрите, что выводится; маловероятно, что закрытый/секретный ключ окажется ненадежным, требуется только доверие, если вы экспортировали ключ из хранилище ключей, а ты?
Ответ 2
Другой возможной причиной этого является попытка использовать модуль x509 на чем-то, что не является x509.
Сертификат сервера в формате x509, но закрытый ключ rsa
Так,
openssl rsa -noout -text -in privkey.pem
openssl x509 -noout -text -in servercert.pem
Ответ 3
Моя ситуация была немного иной. Решение заключалось в том, чтобы вырезать pem из всего, что было за пределами разделов CERTIFICATE и PRIVATE KEY, и инвертировать порядок, в котором они появились.
После преобразования из файла pfx в pem сертификат выглядел следующим образом:
Bag Attributes
localKeyID: ...
issuer=...
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
Bag Attributes
more garbage...
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
После исправления файла это было просто:
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
Ответ 4
У меня была одна и та же проблема с Windows, полученная, если исправлена, открыв ее в Notepad ++ и изменив кодировку с "UCS-2 LE BOM" на "UTF-8".
Ответ 5
Вы можете получить эту вводящую в заблуждение ошибку, если наивно попытаетесь сделать это:
[clear] -> Private Key Encrypt -> [encrypted] -> Public Key Decrypt -> [clear]
Шифрование данных с использованием закрытого ключа не предусмотрено проектом.
Из командной строки для open ssl вы можете видеть, что единственные опции для encrypt → decrypt
идут в одном направлении: public → private
.
-encrypt encrypt with public key
-decrypt decrypt with private key
Другое направление намеренно предотвращено, потому что открытые ключи в основном "могут быть угаданы". Таким образом, шифрование с помощью закрытого ключа означает, что единственное, что вы получаете, - это проверка автором доступа к закрытому ключу.
Направление private key encrypt → public key decrypt
называется "подписанием", чтобы отличать его от метода, который может реально защитить данные.
-sign sign with private key
-verify verify with public key
Примечание: мое описание является упрощением для ясности. Прочитайте этот ответ для получения дополнительной информации.
Ответ 6
Моя ошибка заключалась в простом использовании файла CSR вместо файла CERT.
Ответ 7
Изменить кодировку в блокноте ++ UTF-8 с спецификацией. Вот как это сработало для меня