Рубин на рельсах открытый ССЛ - PullRequest
0 голосов
/ 22 ноября 2018

Я младший разработчик рельсов.У меня есть один сайт с сертификатом Nginx auth .Для генерации некоторого клиентского сертификата я запускаю следующие команды в оболочке:

openssl genrsa -des3 -out /etc/ssl/ca/certs/users/ivan.key 1024


openssl req -new -key /etc/ssl/ca/certs/users/ivan.key \
 -out /etc/ssl/ca/certs/users/ivan.csr

openssl x509 -req -days 1095 \
 -in /etc/ssl/ca/certs/users/ivan.csr \
 -CA /etc/nginx/ssl/ca/certs/myapp.net.crt \
 -CAkey /etc/nginx/ssl/ca/private/myapp.net.key \
 -CAserial /etc/ssl/ca/serial \
 -CAcreateserial \
 -out /etc/ssl/ca/certs/users/ivan.crt

openssl pkcs12 -export -clcerts \
 -in /etc/ssl/ca/certs/users/ivan.crt \
 -inkey /etc/ssl/ca/certs/users/ivan.key \
 -out /etc/ssl/ca/certs/users/ivan.p12

После этого у меня есть один сертификат .p12, который я могу установить в своем браузере и затем работать с сайтом.Поэтому я пытался написать одно приложение с RoR для генерации сертификатов клиентов для наших пользователей.

Я обнаружил, что у rails Openssl gem , я скачал myapp.net.key и myapp.net.crt с моего сервера на локальный компьютер, я поместил эти файлы в папку vendor (только для тестирования) на локальном компьютере.Чем я написал этот код:

# Open server CA .crt and .key
ca     = OpenSSL::X509::Certificate.new( File.read("vendor/myapp.net.crt") )
ca_key = OpenSSL::PKey::RSA.new( File.read("vendor/myapp.net.key"), 'PassPhraseForKey' )

# Create key
keypair = OpenSSL::PKey::RSA.new( 1024 )

# Create certificate
req            = OpenSSL::X509::Request.new
req.version    = 0
req.subject    = OpenSSL::X509::Name.parse(
    "/C=IT/ST=Moscow/L=Moscow/O=Test ltd./OU=Test ltd./CN=myapp.net/emailAddress=my@email.net"
)
req.public_key = keypair.public_key
req.sign( keypair, OpenSSL::Digest::SHA1.new )

cert            = OpenSSL::X509::Certificate.new
cert.version    = 2
cert.serial     = rand( 999999 ) # but on serial file on my server serial is - "D9FD16BA10" - **May be problem is here?**
cert.not_before = Time.now
cert.not_after  = cert.not_before + 1 * 365 * 24 * 60 * 60
cert.public_key = req.public_key
cert.subject    = req.subject
cert.issuer     = ca.subject

ef = OpenSSL::X509::ExtensionFactory.new
ef.subject_certificate = cert
ef.issuer_certificate  = ca
cert.sign( ca_key, OpenSSL::Digest::SHA1.new )

# Generate .p12 certificate for browser
File.open('vendor/client.crt', 'w') { |file| file.write(cert) }
p12 = OpenSSL::PKCS12.create("PassPhrase", "test", keypair.public_key, cert)
File.open('vendor/client.p12', 'w') { |file| file.write(p12.certificate) }

Когда мой скрипт завершает работу, у меня есть сертификат client.p12, но если я пытаюсь получить доступ к сайту с этим сертификатом - у меня 400 Ошибка неверного запроса

Nginx отклоняет этот сертификат.

Что я делаю не так?Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...