TL;DR: Я получаю следующую ошибку при настройке клиента/сервера с помощью ssl:
В частности: ошибка конфигурации ssl: UseCertificateChainFile: ошибки SSL: подпрограммы PEM: PEM_read_bio: нет начальной строки. Подпрограммы SSL: SSL_CTX_use_certificate_chain_file: PEM lib
Детали:
Я размещаю нечто похожее на сервер mysql на ec2 (в частности, mongosqld)
Мне нужно подключиться к нему через ssl, поэтому я создаю сертификаты с помощью openssl на машине, используя этот набор инструкций, предоставляемых mysql: https://dev.mysql.com/doc/refman/5.7/en/creating-ssl-files-using-openssl.html
Я запускаю сервер со следующей командой
mongosqld --schema=schema.drdl \
--addr=0.0.0.0:3307 \
--auth \
--sslMode=allowSSL \
--sslCAFile=ca.pem \
--sslPEMKeyFile=server-key.pem
И на моей машине я прикрепляюсь к серверу так:
mysql --protocol tcp \
--host my.host.on.amazon.com --port 3307 \
--enable-cleartext-plugin \
--ssl-cert mongosqlcerts/client-cert.pem
--ssl-key mongosqlcerts/client-key.pem
--ssl-ca mongosqlcerts/ca.pem
На стороне клиента возникает следующая ошибка:
SSL connection error: error:00000001:lib(0):func(0):reason(1)
В журналах сервера немного более полезно:
mongosqld starting: version=v2.3.1 pid=11461 host=ip-xx-xx-xx-xx
I CONTROL [initandlisten] git version: fa3535342a4c5abe36e3cc28a2ecf72864dfc6fe
I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013
I CONTROL [initandlisten] options: {schema: {path: "schema.drdl"}, net: {bindIp: [0.0.0.0], ssl: {mode: "allowSSL", PEMKeyFile: "server-key.pem", CAFile: "ca.pem"}}, security: {enabled: true}}
I NETWORK [initandlisten] waiting for connections at [::]:3307
I NETWORK [initandlisten] waiting for connections at /tmp/mysql.sock
I NETWORK [conn1] connection accepted from 108.20.XXX.XXX:63353 #1 (1 connection now open)
E NETWORK [conn1] handshake error: ERROR 1043 (08S01): recv handshake response error: ERROR 1043 (08S01): ssl configuration error: UseCertificateChainFile: SSL errors: PEM routines:PEM_read_bio:no start line
SSL routines:SSL_CTX_use_certificate_chain_file:PEM lib
2017-12-01T22:24:50.394+0000 I NETWORK [conn1] end connection 108.20.XXX.XXX:63353 (0 connections now open)
В частности: Ошибка конфигурации ssl: UseCertificateChainFile: ошибки SSL: процедуры PEM: PEM_read_bio: нет начальной строки Процедуры SSL: SSL_CTX_use_certificate_chain_file: PEM lib
Может кто-нибудь помочь мне разобрать эту ошибку.
Спасибо друзьям!
Я понял!
поэтому для аргумента sslPEMKeyFile
в mongosqld, как указано в документах, вам нужно
Задает файл .pem, содержащий и сертификат TLS/SSL и для клиентов MySQL. Укажите имя файла .pem с использованием относительных или абсолютных путей.
Поэтому, когда я использовал openssl для создания ca, server-cert и файлов ключей, мне нужно было создать новый файл, который объединял бы закрытый ключ и server-cert
поэтому я создал новый файл с именем comb.pem со следующим текстом в нем:
-----BEGIN RSA PRIVATE KEY-----
(Your Private Key: your_domain_name.key)
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
(Your Primary SSL certificate: your_domain_name.crt)
-----END CERTIFICATE-----
и запустил сервер с этим, и он сработает!!!