Pep*_*ict 2 ssl openssl nginx docker-compose
我没有主意,请帮忙!
我使用Openssl创建SSL:
openssl req -x509 -newkey rsa:4096 -sha256 -nodes -keyout key.pem -out cert.pem -days 3650
Run Code Online (Sandbox Code Playgroud)
cert.pem看起来像这样:
-----BEGIN CERTIFICATE-----
cert
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
key.pem看起来像这样:
-----BEGIN PRIVATE KEY-----
key
-----END PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
在docker-compose中,我将证书/密钥发送到etc / nginx / ssl / ...
volumes:
- ./sites:/etc/nginx/conf.d
- ./conf/nginx.conf:/etc/nginx/nginx.conf
- ./ssl/cert.pem:/etc/nginx/ssl/cert.pem
- ./ssl/key.pem:/etc/nginx/ssl/key.pem
Run Code Online (Sandbox Code Playgroud)
在nginx中,我添加了这样的内容:
listen 443 ssl;
server_name localhost;
ssl_certificate ssl/cert.pem;
ssl_certificate_key ssl/key.pem;
Run Code Online (Sandbox Code Playgroud)
当我启动docker-compose时,出现了Nginx错误:
web_1 | 2018/08/17 16:38:47 [emerg] 1#1: PEM_read_bio_X509_AUX("/etc/nginx/ssl/cert.pem") failed (SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line:Expecting: TRUSTED CERTIFICATE)
web_1 | nginx: [emerg] PEM_read_bio_X509_AUX("/etc/nginx/ssl/cert.pem") failed (SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line:Expecting: TRUSTED CERTIFICATE)
Run Code Online (Sandbox Code Playgroud)
我已经为此工作了几天,但不确定为什么会一直收到此错误。我尝试使它成为crt / key而不是.pem,并且出现相同的错误。如果我只是一起删除ssl,则服务器工作正常,但我非常需要SSL。Pleaeaaase帮助!
只是扩展@patrick的答案,此命令可用于将受信任的证书转换为普通证书。
$ openssl x509 -in trusted.pem -clrtrust -out normal.pem
Run Code Online (Sandbox Code Playgroud)
注意:如果您的源文件中有多个证书(trusted.pem在上面的示例中),那么您必须对所有证书执行相同的操作。
一旦以PEM编码,“普通”证书将如下所示:
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
(结构的...Base64编码DER)
通常,这(使用关联的密钥,通常在单独的文件中)是任何启用了TLS的应用程序想要向远端显示其身份时所需的东西。
附带说明一下,由于它似乎是一种流行的(错误的)信念,因此文件名本身(包括扩展名)对内容的工作(或不工作)状态没有任何影响。您可以命名文件foobar.42,buzz.666并且如果它们的内容有效,它们也可以正常工作...当然,人工维护会更加困难,因此通常使用.crt证书(或.cert基于非DOS的受限环境)的约定和.key密钥文件,通常使用网站名称(对于网站)或部分名称作为名称,例如example.com.crt。但是,这些只是一组可能的约定,需要这些文件的任何程序都不关心名称,而只关心内容。有些人也在使用.pem扩展名。
有关上述所有内容,请参见https://en.wikipedia.org/wiki/X.509#Certificate_filename_extensions。它对选项进行了很好的讨论/介绍。
现在,在您的情况下,错误消息告诉您它应该具有这样的内容:
-----BEGIN TRUSTED CERTIFICATE-----
...
-----END TRUSTED CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
唯一的区别是添加的TRUSTED关键字。但是,为什么?何时发生?
证书由一个“证书颁发机构”通过一个或多个中间人签名。这将建立起一个根证书的信任链,在该证书的颁发者等于主题的情况下,此证书会对其进行签名。
您自己生成了证书,因此这是一个“自签名”证书,从技术上讲与CA证书没有区别,除了默认情况下,没有系统(包括您自己的系统)在没有特定配置的情况下不会信任该证书。
这基本上就是错误消息告诉您的内容:应用程序说它正在基于无法验证(因为它是自签名)的配置加载证书,与此同时,您也没有明确配置它以信任它。
根据应用程序或其版本的不同,可能会有所不同,因为该指南位于https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-nginx- in-ubuntu-16-04与您所做的基本上相同,并且可以正常工作,但是未显示证书的内容。
在您的openssl通话中,如果您添加-trustout,它将生成BEGIN TRUSTED CERTIFICATE而不是BEGIN CERTIFICATE。默认情况下,也可能会发生这种情况,具体取决于系统上openssl的安装/配置方式。相反,您有-clrtrust。请参阅https://www.openssl.org/docs/man1.1.0/apps/x509.html上openssl x509命令的“信任设置”部分
小智 5
我今天偶然发现了“ Expecting: TRUSTED CERTIFICATE”问题,发现就我而言,这是由于文件编码造成的。
我删除了源自 PFX 到 PEM 转换的标题行,因此文件将以-----BEGIN CERTIFICATE-----. Powershell默认Out-File将文件存储为UTF8NoBOM 。
之后 OpenSSL 无法读取该文件,直到我将其更改为ASCII编码(通过使用Out-File -Encoding ascii)
| 归档时间: |
|
| 查看次数: |
4905 次 |
| 最近记录: |