#java #http #ssl #tomcat #https
Вопрос:
Я пытался запустить HTTP/2 на сервере tomcat, похоже, я не могу исправить эту ошибку: ошибка:0909006C:процедуры PEM:get_name:нет начальной строки.
Ключ и сертификат, которые я сгенерировал, были созданы с помощью OpenSSL. Они находятся в правильном формате (начинается с ——НАЧИНАЕТСЯ). Мне не нужно преобразовывать их в .pem.
Это мое server.xml:
lt;Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" maxThreads="150" SSLEnabled="true" gt; lt;UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" /gt; lt;SSLHostConfiggt; lt;Certificate certificateKeyFile="conf/ssl/cert.key" certificateFile="conf/ssl/cert.crt" type="RSA" /gt; lt;/SSLHostConfiggt; lt;/Connectorgt;
А это мой файл журнала:
12-Nov-2021 09:33:51.072 WARNING [main] org.apache.tomcat.util.net.openssl.OpenSSLContext.init Error initializing SSL context java.lang.Exception: Unable to load certificate key /opt/LCM/LCM-AppServer/tomcat/conf/ssl/cert.key (error:0909006C:PEM routines:get_name:no start line) at org.apache.tomcat.jni.SSLContext.setCertificate(Native Method) at org.apache.tomcat.util.net.openssl.OpenSSLContext.addCertificate(OpenSSLContext.java:380) at org.apache.tomcat.util.net.openssl.OpenSSLContext.init(OpenSSLContext.java:250) at org.apache.tomcat.util.net.SSLUtilBase.createSSLContext(SSLUtilBase.java:247) at org.apache.tomcat.util.net.AprEndpoint.createSSLContext(AprEndpoint.java:397) at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:363) at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1141) at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1154) at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:581) at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:74) at org.apache.catalina.connector.Connector.initInternal(Connector.java:1010) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136) at org.apache.catalina.core.StandardService.initInternal(StandardService.java:533) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136) at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:1057) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136) at org.apache.catalina.startup.Catalina.load(Catalina.java:584) at org.apache.catalina.startup.Catalina.load(Catalina.java:607) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:303) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473) 12-Nov-2021 09:33:51.122 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [5,748] milliseconds 12-Nov-2021 09:39:38.507 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [345,824] milliseconds
Мой коллега попытался запустить точно мою конфигурацию, используя те же файлы сертификатов/ключей на win10, и для них это работает. Мой кот работает на виртуальной машине Ubuntu.
У меня есть эти зависимости:
sudo apt-get install libapr1-dev libssl-dev
И извлеченные и скомпилированные bin/tomcat-native.tar.gz.
Я не могу подключиться к tomcat из-за ошибки, упомянутой выше, chrome выдает мне эту ошибку: ERR_SSL_PROTOCOL_ERROR.
Любая помощь будет признательна. Спасибо!
Комментарии:
1. Не могли бы вы проверить формат файла? Есть ли пустые строки вверху? Может быть, также откройте его с помощью Notepad и отредактируйте —gt; Преобразование EOL —gt;gt; Unix
2. @SusanMustafa OpenSSL (который использует tcnative/APR) игнорирует «дополнительные» строки (пустые или нет) перед начальной строкой и обрабатывает оба EOL. Однако его путают пробелы или невидимые символы в одной и той же обычно первой строке , такие как BOM (популярная, если какая-либо программа Windows когда-либо касалась файла), ZWJ/ZWNJ или BiDi. Звуковой сигнал: попробуйте
cat -vET
илиod -c
в своем файле, чтобы точно увидеть, что в нем.3. Оказалось, после каждого ./shutdown.sh и ./startup.sh файлы .cert и .key были повреждены. Оба файла в конечном счете были в порядке. Мне показалось, что, когда я понял, что файлы были повреждены после каждого перезапуска tomcat, он просто внезапно исправился.