Невозможно использовать самоподписанный сертификат. на локальном хосте

Я создал самозаверяющий сертификат для localhost для тестирования следующим образом:

openssl genrsa -out key.pem 2048 openssl req -new -key key.pem -out certificate.csr openssl x509 -req -in certificate.csr -signkey key.pem -out certificate.pem 

Я указал «localhost» в FQDN. Вот и все, я еще ничего не сделал и не скопировал их нигде, и все 3 файла находятся в каталоге моего приложения.

Когда я запускаю веб-сервер, который не является apache или nginx на localhost, я получаю следующую ошибку:

 $ curl -v https://localhost:3345 * Rebuilt URL to: https://localhost:3345/ * Trying ::1... * connect to ::1 port 3345 failed: Connection refused * Trying 127.0.0.1... * Connected to localhost (127.0.0.1) port 3345 (#0) * ALPN, offering http/1.1 * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH * successfully set certificate verify locations: * CAfile: /etc/ssl/certs/ca-certificates.crt CApath: none * TLSv1.2 (OUT), TLS header, Certificate Status (22): * TLSv1.2 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (OUT), TLS alert, Server hello (2): * SSL certificate problem: self signed certificate * Closing connection 0 * TLSv1.2 (OUT), TLS alert, Client hello (1): curl: (60) SSL certificate problem: self signed certificate More details here: https://curl.haxx.se/docs/sslcerts.html curl performs SSL certificate verification by default, using a "bundle" of Certificate Authority (CA) public keys (CA certs). If the default bundle file isn't adequate, you can specify an alternate file using the --cacert option. If this HTTPS server uses a certificate signed by a CA represented in the bundle, the certificate verification probably failed due to a problem with the certificate (it might be expired, or the name might not match the domain name in the URL). If you'd like to turn off curl's verification of the certificate, use the -k (or --insecure) option. 

Если это имеет значение, вот мой код:

 startApp = do let port = 3345 print $ "Listening the port " ++ (show port) ++ " ..." let tls = tlsSettings "certificate.pem" "key.pem" runTLS tls (setPort port defaultSettings) app 

Итак, вы видите, что я использую «pem» и «pem», а не «csr» и порт 3345.

Я нахожусь на Arch, но мне также нужно решение для Ubuntu.

Как я могу исправить ошибку?

Обратите внимание, что в браузере у меня также есть ошибка. В частности, в FF:

The owner of localhost has configured their website improperly. To protect your information from being stolen, Firefox has not connected to this website.

  • losetup / dev / loop0 исчезает через некоторое время
  • Как автоматически монтировать все USB-устройства на одном USB-разъеме с той же точкой монтирования
  • Команда du показывает косую черту после каталогов?
  • Невозможно передать файлы (поместить) с помощью ftp или filezilla из окон в ubuntu VM
  • Удалите значок уведомлений или сделайте уведомления затухающими через некоторое время
  • Как ограничить доступ ftp к нескольким местам для одного пользователя
  • почему отсутствует apt docs? как его вернуть?
  • Правильная настройка суффикса DNS Ubuntu 17.04?
  • One Solution collect form web for “Невозможно использовать самоподписанный сертификат. на локальном хосте”

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

    Или:

    1. Получите ваш CSR, подписанный доверенным центром сертификации, вместо самоподписывания ( Let's Encrypt является бесплатным и доверяет почти каждому хранилищу доверенных сертификатов из-за того, что он имеет корневой сертификат) или
    2. Добавьте свой сертификат в хранилище доверия системы или
    3. Используйте --cacert <your cert> чтобы доверять только этому сертификату, или
    4. Использовать curl -k (Не рекомендуется, так как проверка не производится)
    Linux и Unix - лучшая ОС в мире.