Моя компания предоставила клиенту приложение на основе Tomcat / MySQL, которое по умолчанию использует http. По просьбе клиента я включил использование https, создав самозаверяющий сертификат. Это сработало с учетом ожидаемой ошибки браузера при использовании самозаверяющего сертификата.
После проверки на проникновение они решили, что нам нужно отключить некоторые устаревшие протоколы ssl и шифров, поэтому я изменил коннектор ssl в моем tomcat server.xml чтобы выглядеть так:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" sslEnabledProtocols="TLSv1.2,TLSv1.1" ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_WITH_AES_128_GCM_SHA256"
keystoreFile="/path/to/keystore/file"
keystorePass="password" />
Это удовлетворило тест на проникновение, и приложение продолжало работать во всех трех основных браузерах (Chrome, Firefox и IE). Однако тест на проникновение также выявил, что в идеале мы не должны использовать самозаверяющий сертификат, поэтому, следуя этим руководствам , я создал CSR и попросил клиента создать сертификат, подписанный на их внутренний домен (к серверу можно получить доступ по нескольким различным URL-адресам, следовательно, необходимо создать CSR с SAN).
Я добавил сертификат в новое хранилище ключей и соответствующим образом изменил путь в файле server.xml. Теперь, когда я пытаюсь подключиться, я получаю следующую ошибку (это от Firefox, но все браузеры выдают аналогичную ошибку):
Secure Connection Failed
Произошла ошибка во время подключения к 172.31.1.36:8443. Не могут безопасно общаться с одноранговым узлом: нет общего алгоритма (ов) шифрования. Код ошибки: SSL_ERROR_NO_CYPHER_OVERLAP
Страница, которую вы пытаетесь просмотреть, не может быть отображена, поскольку не удалось проверить подлинность полученных данных. Пожалуйста, свяжитесь с владельцами веб-сайтов, чтобы сообщить им об этой проблеме.
Насколько я понимаю, сертификат не определяет, какие шифры или протоколы следует использовать, поэтому я не понимаю, почему это произошло. Это ошибка, которую я сделал при создании CSR, или это может быть ошибка клиента при создании сертификата?
-EDIT-
Кажется, я получаю ошибки везде, куда я обращаюсь. Если я пытаюсь импортировать ключ в хранилище ключей, я получаю либо следующее:
cat <keyfile> | openssl pkcs12 -export -out <keystore>.p12
Enter pass phrase:
unable to load certificates
, либо это:
keytool -importkeystore -srckeystore <keyfile> -srcstoretype pkcs12 -destkeystore <keystore>.jks
Enter destination keystore password:
Re-enter new password:
Enter source keystore password:
keytool error: java.io.IOException: toDerInputStream rejects tag type 45
У меня есть заказчик, который отправляет мне цепочку сертификатов, и когда я пытаюсь импортировать, я получаю эту ошибку:
keytool -import -trustcacerts -alias tomcat -file <certchain>.p7b -keystore <keystorefile>.jks
Enter keystore password:
keytool error: java.lang.Exception: Input not an X.509 certificate
Я нашел несколько решений о том, как преобразовать файл pkcs в x.509, но затем у меня появились другие ошибки, так что я полностью застрял.
Сообщение об ошибке немного отвлекающее.
При настройке MikroTik для доступа к Webfig https вы получите эту ошибку, если просто создадите и используете сертификат, не подписанный ЦС. Когда браузер увидит неподписанный сертификат, он выдаст ошибку:
"Код ошибки: SSL_ERROR_NO_CYPHER_OVERLAP"
Не лезьте в кроличью нору, исследуя несовместимые шифры или тому подобное: вам просто нужно подписать сертификат с центром сертификации, и все будет работать, как ожидалось.
Ниже описана специальная MikroTik процедура устранения ошибки.
Не просто вырезайте и вставляйте: Пожалуйста, замените мои заполнители разумными значениями ;-)
/certificate add name=CAyourDomain-template common-name=CAyourDomain country=GB days-valid=3650 key-size=4096 locality="Your City" organization="Your Organization" state=Hertfordshire trusted=yes unit="Technical Services" subject-alt-name="IP:XXX.XXX.XXX.XXX" key-usage=digital-signature,key-cert-sign,crl-sign;
/certificate sign CAyourDomain-template ca-crl-host="XXX.XXX.XXX.XXX" name=CAyourDomain
/certificate add name=webfig-template common-name="webfig" country=GB days-valid=3650 key-size=4096 locality="Your City" organization="Your Organization" state=Hertfordshire trusted=yes unit="Technical Services" subject-alt-name="IP:XXX.XXX.XXX.XXX" key-usage=digital-signature,key-encipherment,data-encipherment,tls-server,tls-client;
/certificate sign webfig-template ca=CAyourDomain name=webfig
/certificate set webfig trusted=yes
Сейчас что сертификат "webfig" был подписан ЦС, вам, наконец, нужно указать его здесь, чтобы использовать его:
"IP" > "Services " и включите "www-ssl" и укажите "webfig" сертификат создан и доступ к подсети HTTPS должен быть разрешен из