Архив метки: ssl

3 способа загрузки файла на сервер с помощью curl

Продемонстрируем curl запрос на примере, с учетом следующих ограничений.
1. Файл надо загрузить методом POST
2. Необходима авторизация
3. На сервере установлен сертификат ssl

Способ 1, командная строка: Загрузка файла непосредственно через командную строку выглядит так:

curl -i -u user:password -X POST --form datafile=@/path/to/some/file.txt https://localhost:443/page --insecure

Разберем подробнее:
-X — указываем метод POST
-u — логин и пароль пользователя
—insecure — при работе по https часто приходится тестировать в тестовом окружении где не стоит проверенный сертификат. Этой опцией отказываемся от проверки.
Чтобы ещё более подробно узнать о тонкостях команды, используйте curl —help

Способ 2, PHP: Продемонстрируем как загрузить файл

// очень полезно предварительно сделать проверку на наличие библиотеки curl для php
if  (!in_array  ('curl', get_loaded_extensions())) {
    exit("CURL is NOT installed on this server");
}

        $ch = curl_init();
        //указываем url адрес на сервере
        curl_setopt($ch, CURLOPT_URL, 'https://localhost:443/page');
        // чтобы возвращало
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        // указываем метод POST
        curl_setopt($ch, CURLOPT_POST, 1); 
        // этот параметр для указания логина и пароля
        curl_setopt($ch, CURLOPT_USERPWD, "login:password");
        curl_setopt($ch, CURLOPT_POSTFIELDS, [
                'some_more_data' => 'здесь можно передать дополнительные параметры, например если эмулируется отправка формы',
                'datafile' => curl_file_create('/path/to/file.txt' , mime_content_type($path_to_file), basename('/path/to/file'))
            ]
        );
        // проверка peer для ssl отключена, смотрите также CURLOPT_SSL_VERIFYHOST для полного игнорирования ssl сертификата
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
        // все опции выставлены - выполняем запрос
        $result = curl_exec($ch);
        // распечатываем ответ сервера
        var_dump($result); 
        // закрываем соединение
        curl_close($ch);

Практически всё прокомментировано в коде, однако отмечу функцию curl_file_create , один сервер постоянно ругался что файл как-то не так указан или отсутсвует. Это вылечилось добавлением мим типа, т.е. функция curl_file_create создает дополнительные заголовки для корректной отправки файла.

Способ 3, Python : Наконец дошли до python, здесь воспользуемя отличной библиотекой requests

import requests

    auth = ('user', 'password')
    data = [
        ('some_more_field', 'some_field_data')
    ]

    # curl request
    files = {'datafile': open('/path/to/file.txt', 'rb')}
    r = requests.post('https://localhost:443/page', files=files, data=data, auth=auth)
    print(r.text)

В указанном примере открываем файл в режиме бинарного чтения, и дальше сразу делаем запроc. В запросе указаны параметры авторизации, метод, страница и файл. Если файлов несколько — просто расширьте словарь files.
Всё просто, удачи с curl!

Как добавить https на сайт с сервером apache

В данной статье расскажу как пошагово установить ssl сертификат на apache (вариант easy, без заморочек)

1. В первую очередь нам обязательно понадобятся закрытый и открытый ключ сертификата. Их конечно можно сгенерировать самостоятельно, командой

openssl req -new -x509 -days 30 -keyout server.key -out server.pem

однако в данном варианте у ваших посетителей в браузере появится отпугивающее предупреждение о недоверии к сайту. Чтобы этого не было, надо обратиться к компании, в которой выдают проверенные сертификаты. К счастью сейчас есть варианты, когда можно бесплатно получить сертификат. Но обычно (особенно для коммерческого использования и для юридических лиц) за сертификат придется выложить денежку, причем цена сильно варьируется в зависимости от типа сертификата, количество доменов итд итп. Я воспользовался сервисом wosign и получил халявный сертификат на 3 года :) Таким образом после первого шага у нас есть 2 ключа: открытый *.crt (расширение может быть другое, например pem) и закрытый *.key.

2. Открытый ключ кладем в папку /etc/ssl/certs/ , закрытый в папку /etc/ssl/private/

3. Настраиваем виртуальный хост для нашего сайта. Для этого идем в /etc/apache2/sites-available/ и открываем на редактирование mysyte.ru.conf

4. В открытом конфигурационном файле есть тег <VirtualHost *:80>. Копируем все содержимое этого тега и создаем точно такой же, но вместо *:80 пишем <VirtualHost *:443> . После этого осталось добавить 3 важные строчки:

SSLEngine on
# Публичный сертификат
SSLCertificateFile    /etc/ssl/certs/*.pem
# Приватный ключ
SSLCertificateKeyFile /etc/ssl/private/*.key

5. На последнем шаге делаем стандартную операцию «[sudo] service apache2 restart» и любуемся на сайт в https .