Как конвертировать ssl-сертификат

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

До этого в руководстве рассматривались только сертификаты X.509 с кодированием ASCII PEM. Однако существует множество других форматов. Некоторые форматы позволяют объединить компоненты – ключ, запрос, сертификат – в один файл.

Чтобы конвертировать PEM в DER, используйте такую команду:

Формат DER обычно использует Java.

Конвертация PEM в PKCS7

Чтобы добавить сертификаты PEM (domain.crt и ca-chain.crt) в файл PKCS7 (domain.p7b), введите:

Файлы PKCS7 (также известные как P7B) часто используются в Java Keystores и Microsoft IIS (Windows).

Конвертация to PKCS7 в PEM

Чтобы конвертировать PKCS7 в PEM, введите:

Обратите внимание: файл PKCS7 содержит много компонентов, а именно сертификат и промежуточный сертификат ЦС

Конвертация PEM в PKCS12

Следующая команда позволяет объединить закрытый ключ и сертификат в файл PKCS12.

Программа запросит пароль. Файл PKCS12 позволяет объединить несколько сертификатов в один PEM-файл (domain.crt).

Файлы PKCS12 (или PFX) обычно используются для перемещения наборов сертификатов в Micrsoft IIS (Windows).

Конвертация PKCS12 в PEM

Чтобы конвертировать файл PKCS12 в формат PEM, введите:

Если в файле PKCS12 было несколько объектов (например, ключ и сертификат), все они переместятся в файл PEM.

Ответ 1

SSL появился достаточно давно и существуют определенные форматы контейнеров. Их слишком много, как это обычно бывает. Итак, вот что я знаю, и я уверен, что другие подтвердят мое мнение.

.csr — Это запрос на подписание сертификата. Некоторые приложения могут генерировать их для отправки в центры сертификации. Фактический формат — PKCS10, который определен в RFC 2986. Он включает некоторые/все ключевые детали запрашиваемого сертификата, такие как субъект, организация, штат и т.д., а также открытый ключ сертификата, который должен быть подписан. Сначала его необходимо подписать в центре сертификации. Возвращенный сертификат — это открытый сертификат (который включает открытый ключ, но не закрытый ключ), который сам может быть в нескольких форматах.

.pem — определенный в RFC с 1421 по 1424, это контейнерный формат, который может включать только открытый сертификат (как, например, при установке Apache и файлов сертификатов CA /etc/ssl/certs),  или может включать всю цепочку сертификатов, включая открытый ключ, закрытый ключ и корневые сертификаты. Настораживает то, что он также может быть закодирован в CSR, Поскольку формат PKCS10 может быть переведен в PEM. Название происходит от Privacy Enhanced Mail (PEM), неудачного метода для безопасной электронной почты. Но формат контейнера, который он использовал, продолжает жить и является переводом x509 ASN.1 ключей в base64.

.key — Это файл в формате PEM, содержащий только закрытый ключ конкретного сертификата, и это просто условное, а не стандартизированное название. В установках Apache он часто находится в каталоге /etc/ssl/private. Права на эти файлы очень важны, и некоторые программы откажутся загружать эти сертификаты, если они установлены неправильно.

.pkcs12 .pfx .p12 — Первоначально определенный RSA в Стандартах криптографии открытых ключей (сокращенно PKCS), вариант «12» был первоначально усовершенствован Microsoft, а затем представлен как RFC 7292. Это формат контейнера с паролем, который содержит пары публичных и приватных сертификатов. В отличие от файлов .pem, этот контейнер полностью зашифрован. OpenSSL может превратить его в файл .pem с открытым и закрытым ключами: 

openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem –nodes

Есть также, несколько других форматов, которые попадаются, время от времени:

.der — способ кодирования синтаксиса ASN.1 в двоичном формате, файл .pem — это просто файл .der, закодированный в Base64. OpenSSL может конвертировать их в .pem (openssl x509 -inform der -in to-convert.der -out converted.pem). Windows воспринимает их как файлы сертификатов. По умолчанию Windows, экспортирует сертификаты как файлы в формате .DER с другим расширением..

.cert .cer .crt — файлы в формате .pem (или редко .der), но с другим расширением, которые распознаются проводником Windows как сертификат, а .pem таковым не является.

.p7b .keystore — Определенный в RFC 2315 как PKCS номер 7, это формат, используемый Windows для обмена сертификатами. Java воспринимает их как нативные, и часто использует .keystore в качестве расширения. В отличие от сертификатов в стиле .pem, этот формат имеет определенный способ включения сертификатов сертификационного пути.

.crl — список отзыва сертификатов. Центры сертификации выпускают их как способ деавторизации сертификатов по истечению срока действия. Иногда их можно загрузить с веб-сайтов центров сертификации.

В целом, существует четыре различных способа представления сертификатов и их компонентов:

  1. PEM — регулируется RFC, используется преимущественно в программах с открытым исходным кодом. Он может иметь различные расширения (.pem, .key, .cer, .cert и т.д.).
  2. PKCS7 — Открытый стандарт, используемый Java и поддерживаемый Windows. Не содержит закрытый ключ.
  3. PKCS12 — закрытый стандарт Microsoft, который позже был определен в RFC и обеспечивает повышенную безопасность по сравнению с обычным текстовым форматом PEM. Он может содержать закрытый ключ. Он используется преимущественно в системах Windows и может быть свободно преобразован в формат PEM с помощью OpenSSL.
  4. DER — родительский формат PEM. Полезно рассматривать его как двоичную версию файла PEM с кодировкой base64. Редко используется за пределами Windows.

Способы конвертации

Существует несколько способов конвертации сертификатов, которые отличаются между собой только простотой конвертирования и уровнем безопасности. Мы расскажем о трех из них.

Конвертация SSl сертификатов посредством OpenSSL

OpenSSL — это надежный, коммерческий и полнофункциональный инструментарий для протоколов Transport Layer Security (TLS) и Secure Sockets Layer (SSL). А также библиотека криптографии общего назначения. Конвертация с использованием библиотеки OpenSSL считается одним из самых безопасных способов: все данные будет сохранены непосредственно на устройстве, на котором будут выполняться операции по конвертированию. 

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

Предоставленные ниже примеры команд OpenSSL позволяют конвертировать сертификаты и ключи в нужный формат.

Конвертировать PEM в DER можно посредством команды:

openssl x509 -outform der -in site.crt -out site.der

Аналогично, для других типов:

PEM в P7B

openssl crl2pkcs7 -nocrl -certfile site.crt -out site.p7b -certfile site.ca-bundle

PEM в PFX

openssl pkcs12 -export -out site.pfx -inkey site.key -in site.crt -certfile site.ca-bundle

Обращаем ваше внимание, что после выполнения команды, будет запрошена установка пароля ключа. DER в PEM

DER в PEM

openssl x509 -inform der -in site.der -out site.crt

P7B в PEM

openssl pkcs7 -print_certs -in site.p7b -out site.cer

P7B в PFX

openssl pkcs7 -print_certs -in site.p7b -out certificate.ceropenssl pkcs12 -export -in site.cer -inkey site.key -out site.pfx -certfile site.ca-bundle

PFX в PEM

openssl pkcs12 -in site.pfx -out site.crt -nodes

Конвертация при помощи онлайн-сервисов

Для конвертации сертификатов самый удобный способ — использование специальных сайтов, например, https://ssl4less.ru/ssl-tools/convert-certificate.html

Этот способ считается наименее безопасным методом: никогда не знаешь, сохраняет ли автор сайта ваш приватный ключ при конвертации.

Конвертация с PEM в DER

Для конвертации необходим только файл сертификата .crt, .pem

Конвертация с PEM в P7B

В этом случае существует возможность добавить также цепочку сертификатов.

Что такое цепочка сертификатов и для чего она нужна, можно узнать в статье «Что такое корневой сертификат» 

Конвертация с PEM в PFX

В этом случае необходимо обратить внимание на то, что обязателен ключ сертификата, а также необходимо установить пароль ключа. Конвертация из DER в PEM

Конвертация из DER в PEM

Конвертация из P7B в PEM

Конвертация из P7B в PFX

Конвертация из PFX в PEM

Конвертация скриптом openssl-ToolKit

OpenSSL ToolKit — скрипт, который облегчает работу с библиотекой OpenSSL. Работа со скриптом является безопасным решением, т.к сертификаты и ключи сертификата никуда не передаются, а используются  непосредственно на вашем сервере.

Для начала работы скрипт необходимо скачать и запустить. Сделать это можно одной командой:

echo https://github.com/tdharris/openssl-toolkit/releases/download/1.1.0/openssl-toolkit-1.1.0.zip \
| xargs wget -qO- -O tmp.zip && unzip -o tmp.zip && rm tmp.zip && ./openssl-toolkit/openssl-toolkit.sh

После выполнения команды откроется следующее окно:

Нас интересует пункт

После перехода в пункт 2. появится следующее меню, с выбором нужного типа конвертирования

После выбора преобразования, в данном случае PEM to FPX, скрипт предложит выбрать директорию с сертификатами на том устройстве, где запускается скрипт.

В нашем случае мы их скачали в директорию

После корректного ввода директории, скрипт отобразит все файлы в этой директории.

Далее нужно ввести имя сертификата, который будем конвертировать, в нашем случае это

Обращаю ваше внимание, что для корректной конвертации, с PEM в PFX, необходимо вручную объединить файл сертификата, цепочки и ключа в один файл, иначе будет возникать ошибка конвертации. Сделать это можно простой командой 

Сделать это можно простой командой 

cat site.crt site.ca-bundle site.key > site.pem

Данное действие необходимо только для конвертации из PEM в PFX.

Мы рассмотрели пример конвертации PEM в PFX. Этим же путем можно конвертировать сертификаты в другие форматы. Единственное, что вам уже не понадобится шаг с объединением файлов.

Пример конвертации PEM В DER.

Генерирование запроса на подпись сертификата

Генерирование закрытого ключа и запроса

Этот метод позволяет вам подписать сертификат в ЦС и защитить веб-сервер Apache или Nginx с помощью HTTPS. Сгенерированный запрос на подпись можно отправить в ЦС, чтобы получить подписанный сертификат. Если ЦС поддерживает SHA-2, добавьте опцию -sha256.

Следующая команда создаст 2048-битный закрытый ключ (domain.key) и CSR (domain.csr):

Заполните поля в запросе на подпись.

Опция -newkey rsa:2048 создаст 2048-битный RSA-ключ. Опция –nodes отключает пароль для закрытого ключа.

Генерирование запроса для существующего закрытого ключа

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

Следующая команда создаст запрос сертификата (domain.csr) для существующего ключа (domain.key):

Ответьте на запросы программы, чтобы продолжить. Опция –new указывает, что запрос нужно сгенерировать.

Генерирование запроса для существующего сертификата и ключа

Этот метод позволяет обновить существующий сертификат, если оригинальный запрос на подпись сертификата был утерян.

Следующая команда создаст запрос (domain.csr) на основе существующего сертификата (domain.crt) и закрытого ключа (domain.key):

Опция -x509toreq создаст сертификат X509.

Ответ 2

PEM — сам по себе не является сертификатом, это просто способ кодирования данных. Сертификаты X.509 — это один из типов данных, которые обычно кодируются с помощью PEM.

PEM — это сертификат X.509 (структура которого определена с помощью ASN.1), закодированный с помощью ASN.1 DER (distinguished encoding rules),  затем закодированный Base64 кодировкой и вставленный между заголовками текста (BEGIN CERTIFICATE и END CERTIFICATE).

Вы можете представить те же данные, используя представления PKCS#7 или PKCS#12, и для этого можно использовать утилиту командной строки OpenSSL.

Очевидным преимуществом PEM является то, что его безопасно вставлять в тело электронного сообщения, поскольку он имеет заголовки и 7-битную кодировку.

RFC1422 содержит более подробную информацию о стандарте PEM в части, касающейся ключей и сертификатов.

Установка OpenSSL для Windows

Теперь нам необходимо наш файл pfx переделать в pem, Pem преобразовать в key:

  • с расширением .ca-bundle
  • с расширением .crt
  • key

Вы получите из этих трех файлов, нужный для импорта pfx архив. Во всем этом нам поможет утилита OpenSSL для Windows.

Скачать OpenSSL для Windows x64 — https://cloud.mail.ru/public/MZmy/yKvJkc7Ad

В итоге у вас будет архив, распакуйте его куда вам будет угодно. Далее выберите вашу папку, зажмите SHIFT и щелкните по ней правым кликом, в открывшемся контекстном меню, выберите пункт «Открыть окно команд».

В результате чего у вас откроется командная строка Windows, но уже в нужной папке содержащей утилиту openssl.exe, она нам и поможет все сделать красиво.

Преобразование PFX в PEM

Теперь приступаем к получению фала в формате Pem. Положите в папку с дистрибутивом файл в формате pfx.

openssl.exe pkcs12 -in «имя вашего pfx файла» -nocerts -out key.pem

Мой пример:

openssl.exe pkcs12 -in api.pyatilistnik.ru.pfx» -nocerts -out key.pem

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

В папке с дистрибутивом OpenSSL вы обнаружите файл key.pem, он нам нужен будет для следующего этапа.

Преобразование PEM в KEY

Теперь получим файл с расширением key, для этого есть вот такая команда:

openssl rsa -in key.pem -out <путь к вашему файлу key>

Мой пример:

openssl rsa -in key.pem -out api.pyatilistnik.ru.key

Вас попросят указать пароль от pem ключа.

В итоге я получил закрытый ключ в формате key.

Осталась финишная прямая.

Получаем PFX ключ для импорта в IIS

Теперь когда у вас есть все составляющие, вы можете выполнить последнюю команду для создания PFX файла для IIS сервера.

Задаем пароль для pfx файла, потребуется при импортировании.

В итоге вы получаете нужный вам файл, который можно загружать на ваш почтовый сервер.

ОНЛАЙН КОНВЕРТЕР SSL СЕРТИФИКАТОВ

Также существуют онлайн программы для конвертации сертификатов из одного формата в другой. Например, мы можем посоветовать SSL конвертер от SSLShopper. Используйте этот SSL конвертер для преобразования SSL-сертификатов различных форматов, таких как PEM, DER, P7B и PFX. Чтобы использовать SSL-конвертер, просто выберите файл сертификата и его текущий тип (он определяется по формату расширения), затем выберите формат, в какой Вам необходимо преобразовать SSL сертификат и нажмите кнопку “Convert Certificate”

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

КОНВЕРТАЦИЯ PEM В DER

Для конвертации стандартного сертификата в формате PEM в бинарный формат DER, потребуется только файл SSL сертификата. Обычно, вы его получаете в архиве вместе с промежуточными сертификатами. Как правило, в его названии указано имя вашего домена.

КОНВЕРТАЦИЯ PEM В P7B / PKCS#7

Если же вам нужно преобразовать ваш стандартный SSL сертификат в файл формата P7B / PKCS#7, вы можете кроме SSL сертификата вашего домена загрузить также файлы с цепочками сертификатов.

ОБЗОР ФОРМАТОВ SSL CЕРТИФИКАТОВ

ФОРМАТ СЕРТИФИКАТА PEM

PEM – наиболее популярный формат среди сертификационных центров. PEM сертификаты могут иметь расширение .pem, .crt, .cer, и .key (файл приватного ключа). Она представляют собой ASCII файлы, закодированные по схеме Base64. Когда вы открываете файл pem формата в текстовом редакторе, вы можете увидеть, что текст кода в нем начинается с тега «—— BEGIN CERTIFICATE ——» и заканчивая тегом «—— END CERTIFICATE ——«. Apache и другие подобные серверы используют сертификаты в PEM формате

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

Как правило, для установки SSL сертификата на Apache, сертификаты и приватный ключ должны быть в разных файлах.

ФОРМАТ СЕРТИФИКАТА DER

DER формат – это бинарный тип сертификата вместо формата PEM. В PEM формате чаще всего используется расширение файла .cer, но иногда можно встретить и расширение файла .der. Поэтому чтобы отличить SSL сертификат в формате PEM от формата DER, следует открыть его в текстовом редакторе и найти теги начала и окончания сертификата (BEGIN/END). DER SSL сертификаты, как правило, используются на платформах Java.

PKCS # 7 / P7B СЕРТИФИКАТ

SSL сертификаты в формате PKCS # 7 или P7B — это файлы, которые хранятся в формате Base64 ASCII и имеют расширение файла .p7b или .p7c. P7B сертификаты содержат теги начала сертификата «—— BEGIN PKCS7 ——» и его конца «—— END PKCS7 ——«. Файлы в формате P7B включают в себя только ваш SSL сертификат и промежуточные SSL сертификаты. Приватный ключ при этом идет отдельным файлом. SSL сертификаты в формате PKCS # 7 / P7B поддерживают следующие платформы: Microsoft Windows и Java Tomcat.

PFX СЕРТИФИКАТ (ФОРМАТ PKCS # 12)

Формат SSL сертификата PKCS # 12 или, как его еще называют, PFX сертификат — бинарный формат, при использовании которого в одном зашифрованном файле хранится не только ваш личный сертификат сервера и промежуточные сертификаты центра сертификации, но и ваш закрытый ключ. PFX файлы, как правило, имеют расширение .pfx или .p12. Обычно, файлы формата PFX используются на Windows серверах для импорта и экспорта файлов сертификатов и вашего приватного ключа.

SEO и SSL

  • Google заявлял о том, что присутствие https на сайте является положительным фактором для ранжирования. То есть из двух абсолютно одинаковых сайтов, в поисковой выдаче выше будет тот, который с https
  • Если некоторые части сайта мигрировали в HTTPS, а некоторые — нет, то позитивный сигнал к ранжированию получат только страницы с https в URL-адресах.
  • Есть слухи что Google Chrome будет помечать сайты без https как не надежные.
  • Необходимо использовать 2048-разрядные ключи для всех сертификатов.
  • Используйте относительные URL адреса, это облегчит переход с http на https
  • Для перехода с http на https можно использовать редирект в файле htaccess
  • Убедитесь что в теге rel=»canonical» используются ссылки с http, а не https
  • Убедитесь что в индексе поисковиков не присутствуют одновременно и http и htpps версии одной страницы — это может восприниматься как дублированный контент
  • CSS, JS, изображения и прочие файлы также должны использовать https

CSR Запрос SSL сертификата

При покупке SSL сертификата при помощи специальных утилит или сервисов генерируется CSR запрос (Certificate Signing Request) в котором закодированы следующие данные:

  • Common Name: elims.org.ua — доменное имя, защищаемое сертификатом
  • Organization: elimS — компания-владелец домена
  • Organization Unit: IT — департамент\отдел компании
  • Locality: Kiev — город
  • State: Kiev — область
  • Country: UA — двухбуквенный код страны
  • Email: [email protected] — почтовый ящик

При генерации запроса получаем две части: публичную, которую нужно сообщить тому, кто генерирует нам сертификат (центру сертификации) и приватную, которую нужно будет прописать на сервере, где будет находиться ваш сайт с ssl-сертификатом.

Ниже пример публичной части такого CSR запроса, в котором закодированы указанные выше данные:

-----BEGIN CERTIFICATE REQUEST-----
MIICyDCCAbACAQAwgYIxCzAJBgNVBAYTAlVBMQ0wCwYDVQQIDARLaWV2MQ0wCwYD
VQQHDARLaWV2MQ4wDAYDVQQKDAVlbGltUzELMAkGA1UECwwCSVQxFTATBgNVBAMM
DGVsaW1zLm9yZy51YTEhMB8GCSqGSIb3DQEJARYSYWRtaW5AZWxpbXMub3JnLnVh
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvcvusWoQJ+iVE9Z8bD6F
k00/GMiwLNi+mR0EJwp2TGybVgUnydlK2FV8o0091ZuGrkniwnoimX+8N4ATzem1
jMeXlScqmLdWL2R6DnUTWHiIWezAmyIO51gBiMJ0E+jbfnauog2rNXTgGZbzJRvR
7y8hnL10DYtCfbCObxERynJWzxBFmK0qm8NREMMTa1dZGgmT7e9+afLMaKYqLlcM
DGQNvIQyehI4g8aQwS2OJ7JuTcTXMusWjSQFIMeleg8nkuWJZ6awtTN6Rubh/VHI
XO7LC4zdo8xzo8ub4calLSwi5Flr5iZUyzYxrqj2raBQ9pH1nCCyczlkH6I1HaHq
nwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAG2HoDX4zfmk331tp+VCEIpGooUt
1EgwGLf73SD7x7ZH6K0fe44cKECmc//Gdvr3UObckYw/aMgR88eGmWnpkjhGz0kX
IfCqpK5zkoaBihofbs1G8+liuocvnMtKCphH/56GPAxPG/K7breJMGiaEkAq0Axn
ozbvvSBbzILdV7xygSib6D20rvdsNOh7fKzo0bSgBhizuQ4/c0uPCTRzFrOvVVNW
mY1NPF4IkurN2iEhbrGlJbKTki+SNh8oRrLyXDzqJE8QcZHKnO69JECGMTjhCDGI
Kr/rxRB/p7qmlCUqhlVS2A6NhicKvAs+s9gE8BZE4uKXtp5vaOXxlJofpC0=
-----END CERTIFICATE REQUEST-----

Раскодировать CSR и посмотреть что в нем зашифровано, например при помощи этих сервисов:

  • sslshopper.com/csr-decoder.html
  • certlogik.com/decoder

Или утилиты openssl и команды:

После того как центр сертификации убедится в правильности переданных данных (в CSR запросе) Вам будет выдан SSL сертификат. Время проверки зависит от типа сертификата. Сертификаты подтверждающие только доменное имя (самые дешевые сертификаты) выдаются в автоматическом режиме, так как в них не нужно проверять существует ли указанная компания, ее контакты тд. и тп.

Создать CSR с новым сертификатом через утилиту OpenSSL

openssl req -new -newkey rsa:2048 -nodes -keyout domain_name.key -out domain_name.csr

Что делать если нет сертификата в запросах заявок на сертификат

Бывают ситуации, что на вашем сервере по каким-то причинам, в папке запросы на сертификат, может не оказаться вашего, в этом случае вам необходимо будет перейти в этой же mmc в раздел «Личное-Сертификаты». Выбираем нужный и делаем экспорт.

Появится мастер экспорта сертификатов.

Обратите внимание, что в pfx выгрузить не получится, но это не страшно, нам подойдет и p7b, но с включенной галкой «Включить по возможности все сертификаты в путь сертификации»

Указываем путь сохраняемого файла.

Видим, что все успешно выполнено.

Преобразование p7b в pem

Попробует такое преобразование.

openssl pkcs7 -in cert.p7b -inform DER -print_certs -out cert.pem

Мой пример

openssl.exe pkcs7 -in new.pyatilistnik.ru.p7b -inform DER -print_certs -out new.pyatilistnik.ru.pem

В итоге я получил файл new.pyatilistnik.ru.pem

Ну, а дальше уже по инструкции сверху. Если у вас выскочит ошибка, по типу

C:\AMD64-Win64OpenSSL-0_9_8g>openssl.exe rsa -in new.pyatilistnik.ru.pem -out new. pyatilistnik.ru.key unable to load Private Key 6944:error:0906D06C:PEM routines:PEM_read_bio:no start line:.\crypto\pem\pem_lib .c:647:Expecting: ANY PRIVATE KEY

То наш вариант это .crt в .der и уже .der в .pem

Преобразование CRT в PEM

Кладем так же все в одну папку, файл crt вам должны были прислать вместе с ca-bundle.

Первое это crt в der

openssl x509 -in new.pyatilistnik.ru.crt -out new.pyatilistnik.ru.der -outform DER

Теперь der в pem.

openssl x509 -in new.pyatilistnik.ru.der -inform DER -out new.pyatilistnik.ru.pem -outform PEM

В итоге у меня получилось, вот так.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: