Я только что потратил день на выяснение этой точной проблемы, поэтому я поделюсь своим процессом здесь.
Каждая из приведенных ниже ссылок содержит инструкции по созданию и использованию самозаверяющего сертификата. Это не совсем то, что я пытаюсь сделать, но каждый из них содержит некоторую полезную справочную информацию.
ИСПОЛЬЗОВАННАЯ ЛИТЕРАТУРА:
Я уже приобрел настоящий сертификат SSL, выпущенный центром сертификации, для 'wildcard' домена * .jimtough.org. Я приобрел сертификат в http://www.namecheap.com/, но фактический центр сертификации (CA ) является Comodo.
В рамках процедуры покупки / активации в центре сертификации мне нужно было выполнить следующие инструкции:
Обратите внимание, что я решил следовать их инструкциям AWS, потому что я являюсь пользователем AWS и у меня есть сервер EC2, на котором уже установлены OpenSSL и Java. Существует множество других альтернатив для выполнения той же процедуры, поэтому поищите дальше, чтобы найти инструкции по созданию CSR, которые подходят именно вам.
В конце этого шага у меня есть следующие два файла:
csr.pem
- используется как часть процесса запроса / активации сертификата SSL.
private.key
- Это часть моего закрытого ключа SSL-сертификата, которая мне понадобится позже для установки сертификата на мои серверы. Держите это в секрете. Держите это в безопасности.
После того, как я завершил процедуру покупки и проверки моего сертификата SSL, центр сертификации отправил мне обратно файл .zip, содержащий файлы .p7b, .crt и .ca-bundle.
Одна из ссылок ниже объясняет разницу между этими типами файлов сертификатов:
.p7b
- этот тип должен быть совместим с приложениями на основе Java (формат PKCS # 7)
.crt
- Этот тип должен быть совместим со всем остальным - ссылка выше предполагает, что это формат PEM
.ca-bundle
- Не уверен, когда это использовать - ссылка выше предполагает, что это формат PEM
ИСПОЛЬЗОВАННАЯ ЛИТЕРАТУРА:
Затем мне нужно выяснить, как использовать файлы, перечисленные выше, для настройки моего приложения Spring Boot для HTTPS.
Я буду следовать соответствующим частям приведенных ниже руководств, чтобы получить то, что мне нужно:
ПРИМЕЧАНИЕ. В обоих руководствах я НЕ буду следовать их разделам по созданию самозаверяющих сертификатов, поскольку у меня уже есть настоящий сертификат, выданный настоящим центром сертификации.
Первым важным шагом в их инструкциях является создание нового хранилища ключей Java. Требования:
- Должна быть установлена Java, поэтому у меня есть доступ к утилите keytool.
- У меня должна быть установлена утилита openssl, чтобы я мог создать файл .p12, используя мои файлы .key и .p7b в качестве входных.
Для этого я буду использовать свой сервер AWS EC2 Linux. На моем сервере уже установлены утилиты Java / keytool и OpenSSL. Сначала мне нужно использовать утилиту OpenSSL для создания файла .p12, который (если я правильно понимаю) будет содержать как мой закрытый ключ, так и сертификат CA-выдачи. Во-вторых, мне нужно создать новое хранилище ключей Java, которое будет содержать импортированную копию файла .p12.
openssl pkcs12 -export -out jimtough-dot-org.p12 -name "jimtough-dot-org" -inkey private.key -in __jimtough_org.crt
- IMPORTANT: You need to provide a password at the 'export password' prompt, otherwise the keytool import in the next step will fail
keytool -importkeystore -srckeystore jimtough-dot-org.p12 -srcstoretype PKCS12 -destkeystore jimtough-dot-org-keystore.jks -deststoretype JKS
- You will need to provide the password you used in the 'openssl' command
- Вам также потребуется указать новый пароль для создаваемого вами хранилища ключей.
- (OPTIONAL)
keytool -importkeystore -srckeystore jimtough-dot-org-keystore.jks -destkeystore jimtough-dot-org-keystore.pkcs12 -deststoretype pkcs12
- I received a warning from 'keytool' about JKS being a proprietary format, and a suggestion that I convert my keystore to PKCS12 format, so I did so with this optional command
Наконец, мне нужно упаковать мое недавно созданное хранилище ключей Java с моим приложением Spring Boot и настроить приложение для его использования.
ИСПОЛЬЗОВАННАЯ ЛИТЕРАТУРА:
Я сослался на два руководства по Baeldung выше и смог получить детали, необходимые для работы моей Spring Boot (с включенной Spring Security).
Я создал новую папку «хранилище ключей» в существующем «src / main / resources» и скопировал туда оба моих вновь созданных файла хранилища ключей (я сохранил оба формата).
Я добавил блок ниже в файл application.properties
моего приложения Spring Boot.
#--------------------------------------------------------------------------------------------------
# SSL CONFIGURATION
# The format used for the keystore. It could be set to JKS in case it is a JKS file
#server.ssl.key-store-type=JKS
server.ssl.key-store-type=PKCS12
# The path to the keystore containing the certificate
#server.ssl.key-store=classpath:keystore/jimtough-dot-org-keystore.jks
server.ssl.key-store=classpath:keystore/jimtough-dot-org-keystore.pkcs12
server.ssl.key-store-password=mykeystorepassword
server.ssl.key-alias=jimtough-dot-org
server.ssl.enabled=true
server.port=8443
#--------------------------------------------------------------------------------------------------
Как и ожидалось, я получаю кучу предупреждений от своего браузера, когда пытаюсь подключиться к локально запущенному экземпляру приложения Spring Boot, используя https: // localhost: 8443 / в качестве URL-адреса. Это происходит потому, что браузер правильно определяет несоответствие между localhost и ожидаемым доменом jimtough.org, для работы на котором был создан мой SSL-сертификат. При развертывании приложения на сервере, имя хоста которого - «something.jimtough.org» (или просто ), предупреждений не должно быть. www.jimtough.org).
Вот и все! Удачного HTTPS!
person
Jim Tough
schedule
20.12.2020