Можно ли подписать сообщение SSL-сертификатом для сайта?

379
toddmo

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

Как я могу подписать сообщение, используя мой сертификат SSL-сайта?

1
Ты не можешь Сертификаты SSL используются для защиты доменов, а не для подписи сообщений. DavidPostill 5 лет назад 3
@ Дэвид Нет, технически вы, безусловно, могли бы сделать это (в конце концов, способ, которым сертификаты «защищенные домены» ** это ** путем создания цифровых подписей во время рукопожатия TLS) ... Получатель может не принять подпись из-за несовпадения extendedKeyUsage, хотя , И я знаю, как это сделать только через openssl, а не через Windows CAPI. grawity 5 лет назад 1
@ grawity, если вы хотите дать ответ на `openssl`, я приму его. Это заложит общую идею, а затем я могу экстраполировать ее на другие среды, такие как окна. В эти дни есть инструмент практически для всего. Обратите внимание, что, как вы упомянули, меня не волнует, что такое «сообщение», если я могу подписать его, и они могут его проверить. Спасибо! toddmo 5 лет назад 0
@toddmo Проверьте https://stackoverflow.com/questions/10782826/digital-signature-for-a-file-using-openssl Bora 5 лет назад 1
@DavidPostill, я не понимаю ваш комментарий, так как я только что подписал и подтвердил сообщение, используя мой сертификат SSL домена. Что именно ты говоришь, я не могу сделать? Вы можете уточнить? Я отправил ответ, показывающий, что я сделал. toddmo 5 лет назад 0
Тодд, То, что вы делаете, технически * возможно *, но это определенно громоздко. Процесс подписания электронных писем и без того сложен, даже когда кажется, что он прост, поэтому @DavidPostill утверждает, что «с точки зрения пользовательского опыта это не стоит усилий». JakeGould 5 лет назад 0
@JakeGould, так что вы говорите, суперпользователь только для пользователей, и как разработчик, я должен был спросить об этом на stackoverflow? Я думал, что суперпользователь предназначен для «ИТ-администраторов», а не для «пользователей». toddmo 5 лет назад 0
@toddmo «… так что вы говорите, суперпользователь…» Я совершенно не знаю, откуда вы делаете эти общие выводы. Я рад, что вы нашли решение! Но я также просто пытаюсь уточнить, о чем писал Дэвид Постилль. JakeGould 5 лет назад 0

1 ответ на вопрос

1
toddmo

Это оказалось прямо вперед. Кредит переходит на https://stackoverflow.com/a/18359743/1045881 . Я просто переписал это для новичков, как я.

Допустим, сайт example.com

Windows

Получение вашего сертификата

Если вы на стороне подписи, вы контролируете свой сертификат. Вы можете следовать хорошим инструкциям по адресу: https://www.thawte.nl/en/support/manuals/microsoft/all+windows+servers/export+private+key+or+certificate/

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

Если вы только на стороне проверки, вы можете щелкнуть по замку рядом с веб-адресом в вашем браузере, просмотреть сертификат и экспортировать его base64 в файл crt или cer. Имя файла не важно, но domain.crtэто хорошее имя.

Установите openssl

Установите openssl. Я использовал https://indy.fulgan.com/SSL/, на который меня ссылались https://wiki.openssl.org/index.php/Binaries . Распакуйте его в папку установки openssl. Я назову это папкой openssl.

Запустите openssl

просто перейдите в папку openssl, введите opensslи нажмите Enter. Теперь вы в opensslподсказке.

Знак

Вам нужен ваш личный ключ. Это выглядит так:

-----BEGIN RSA PRIVATE KEY----- (bunch of base64 text)== -----END RSA PRIVATE KEY----- 

Сохраните это, например example.key. Но имя файла не важно, просто полезно.

Затем сохраните сообщение в файл с именем message.txt. Это может быть пустым. И имя файла не важно.

Затем в вашей папке openssl (где вы распаковали файлы), запустите

dgst -sha256 -sign example.key -out signature.txt message.txt 

он использует сообщение и ключ для создания подписи.

message+ key=>signature

проверить

Вам понадобится сертификат сайта. Это выглядит так:

-----BEGIN CERTIFICATE----- (bunch of base64)== -----END CERTIFICATE----- 

Сохраните это в example.crt. Имя не имеет значения.

Во-первых, вам нужно создать открытый ключ из файла сертификата ( example.crt) следующим образом:

x509 -in example.crt -pubkey -noout -out example.pub 

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

certificate => public key

Затем вы можете проверить сообщение следующим образом:

dgst -sha256 -verify example.pub -signature signature.txt -out result.txt message.txt 

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

public key+ signature+ message=>result

result.txt будет содержать «Подтверждено ОК» или «Ошибка проверки».


Linux

Инструкции в ближайшее время. Я думаю, что это очень похоже, за исключением незначительного синтаксиса.

Похожие вопросы