HAProxy无法加载letsencrypt生成的.pem文件,为什么会这样?
我看到的错误是:
parsing [/haproxy.cfg:37] : 'bind :443' : unable to load SSL private key from PEM file '/certs/cert0.pem'.
PEM文件的内容是:
-----BEGIN CERTIFICATE-----
MIIFCjCCA/KgAwIBAgISATGh2D5ZMcKNqpIqViwd5EZOMA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMTAeFw0xNTEyMTcwOTIyMDBaFw0x
NjAzMTYwOTIyMDBaMB4xHDAaBgNVBAMTE3N0YWdpbmcubXV6aGFjay5jb20wggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrV1XqamfHm6tbDYAbnbjRxBw8
pxM/wPdO9RLUk5EmPnYy0XmPrbge93M5hh4qzMA7IGRxRa4xXjmj2nl4y6oLmRzF
nqHRBznh0D3u27dOmxk9vgWEGFO423T4W4DW5T6ukw+i2V5zxdtiu9tP7s8qsN7P
IxKQ8tPx8NB0PYXTg+DWhPQMZkX3Q63YEJrl6pR1kQ+shOg1WRw08/gfl8YCH0bj
AtbSPwwSNzNVylgA2IZX6mTrBYnbXJ5N63Ee/p1e+vw9fqxha4B4qPpNoByvgR27
cIGFjEoBzeS76awPzBnZLWNaVqM3E0YL9riQnAAgYPrqBIofV65GELBjwVRFAgMB
AAGjggIUMIICEDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEG
CCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFC5MVU7RKuD07ZwP6kGT
49qPO2tFMB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMHAGCCsGAQUF
BwEBBGQwYjAvBggrBgEFBQcwAYYjaHR0cDovL29jc3AuaW50LXgxLmxldHNlbmNy
eXB0Lm9yZy8wLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14MS5sZXRzZW5j
cnlwdC5vcmcvMB4GA1UdEQQXMBWCE3N0YWdpbmcubXV6aGFjay5jb20wgf4GA1Ud
IASB9jCB8zAIBgZngQwBAgEwgeYGCysGAQQBgt8TAQEBMIHWMCYGCCsGAQUFBwIB
FhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCBqwYIKwYBBQUHAgIwgZ4MgZtU
aGlzIENlcnRpZmljYXRlIG1heSBvbmx5IGJlIHJlbGllZCB1cG9uIGJ5IFJlbHlp
bmcgUGFydGllcyBhbmQgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIENlcnRp
ZmljYXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL2xldHNlbmNyeXB0Lm9yZy9y
ZXBvc2l0b3J5LzANBgkqhkiG9w0BAQsFAAOCAQEAmcF6jtx6QWAOQtRLhnuDyViJ
9ISP2mw8Ueq5p3L/oBMebCAjS1qv7bCcHP5RyeaqsGrHclpv090JY44rCppj5oOh
OFzzsNqZ5dwLp8vNbPls1Y7ohThVxk5PfMGpfkDwpuZGxUkizB7qQtknjBr6lX2B
XX2/IknJnABU2ssh2q77aqeVkHYVWXYG8iNMETUcIys1/Mb7X/FdL1DGRhkS1kN0
geL/+e7pmusHijkSoOP7IXFgTfcnw1DiIPctXmH2/ETcQ5deWVTgOpCTBk0M1+d2
oFFNaePdQXk4iRYlJNrswoZCSgdqqUybvEcJDKvL+ogi6GwZpJCIn/Rc2PWhGQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEqDCCA5CgAwIBAgIRAJgT9HUT5XULQ+dDHpceRL0wDQYJKoZIhvcNAQELBQAw
PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
Ew5EU1QgUm9vdCBDQSBYMzAeFw0xNTEwMTkyMjMzMzZaFw0yMDEwMTkyMjMzMzZa
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMTCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBAJzTDPBa5S5Ht3JdN4OzaGMw6tc1Jhkl4b2+NfFwki+3uEtB
BaupnjUIWOyxKsRohwuj43Xk5vOnYnG6eYFgH9eRmp/z0HhncchpDpWRz/7mmelg
PEjMfspNdxIknUcbWuu57B43ABycrHunBerOSuu9QeU2mLnL/W08lmjfIypCkAyG
dGfIf6WauFJhFBM/ZemCh8vb+g5W9oaJ84U/l4avsNwa72sNlRZ9xCugZbKZBDZ1
gGusSvMbkEl4L6KWTyogJSkExnTA0DHNjzE4lRa6qDO4Q/GxH8Mwf6J5MRM9LTb4
4/zyM2q5OTHFr8SNDR1kFjOq+oQpttQLwNh9w5MCAwEAAaOCAZIwggGOMBIGA1Ud
EwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMH8GCCsGAQUFBwEBBHMwcTAy
BggrBgEFBQcwAYYmaHR0cDovL2lzcmcudHJ1c3RpZC5vY3NwLmlkZW50cnVzdC5j
b20wOwYIKwYBBQUHMAKGL2h0dHA6Ly9hcHBzLmlkZW50cnVzdC5jb20vcm9vdHMv
ZHN0cm9vdGNheDMucDdjMB8GA1UdIwQYMBaAFMSnsaR7LHH62+FLkHX/xBVghYkQ
MFQGA1UdIARNMEswCAYGZ4EMAQIBMD8GCysGAQQBgt8TAQEBMDAwLgYIKwYBBQUH
AgEWImh0dHA6Ly9jcHMucm9vdC14MS5sZXRzZW5jcnlwdC5vcmcwPAYDVR0fBDUw
MzAxoC+gLYYraHR0cDovL2NybC5pZGVudHJ1c3QuY29tL0RTVFJPT1RDQVgzQ1JM
LmNybDATBgNVHR4EDDAKoQgwBoIELm1pbDAdBgNVHQ4EFgQUqEpqYwR93brm0Tm3
pkVl7/Oo7KEwDQYJKoZIhvcNAQELBQADggEBANHIIkus7+MJiZZQsY14cCoBG1hd
v0J20/FyWo5ppnfjL78S2k4s2GLRJ7iD9ZDKErndvbNFGcsW+9kKK/TnY21hp4Dd
ITv8S9ZYQ7oaoqs7HwhEMY9sibED4aXw09xrJZTC9zK1uIfW6t5dHQjuOWv+HHoW
ZnupyxpsEUlEaFb+/SCI4KCSBdAsYxAcsHYI5xxEI4LutHp6s3OT2FuO90WfdsIk
6q78OMSdn875bNjdBYAqxUp2/LEIHfDBkLoQz0hFJmwAbYahqKaLn73PAAm1X2kj
f1w8DdnkabOLGeOVcj9LQ+s67vBykx4anTjURkbqZslUEUsn2k5xeua2zUk=
-----END …
我已经使用--standalone标志设置了证书,这很好用,但是问题是每次必须更新证书时,我都必须停止Nginx服务器,因为--standalone选项要求端口80可用。
--webroot方法不需要停止服务器,并且基本上不需要关闭服务器上的所有站点。
因此,是否可以使用--webroot更新使用--standalone标志安装的证书?
我正在使用certbot应用Let's Encrypt证书,我的服务器是centos 7.2和nginx 1.11.9。下面是什么意思?
[root@test ~]# certbot certonly --webroot -w /var/www/www.example.com -d example.com -d www.example.com
Failed authorization procedure. example.com (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://example.com/.well-known/acme-ch
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>", www.example.com (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://www.example.com/.well-known/acme-challenge/k
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>"
IMPORTANT NOTES:
- If you lose your account credentials, you can recover …Run Code Online (Sandbox Code Playgroud) 我希望.well-known在我的root中有一个目录用于letsencrypt续订.
我添加了一条路线.well-known:
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @".well-known")),
RequestPath = new PathString("/.well-known"),
ServeUnknownFileTypes = true // serve extensionless file
});
Run Code Online (Sandbox Code Playgroud)
我在我的wwwroot中添加了一个direcotry,.well-known但是当我发布时它永远不会被复制到输出中.
我尝试添加一个文件,并编辑csproj:
<ItemGroup>
<Content Include="wwwroot\.well-known\" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
每次我发布我都要手动创建目录.如何将其自动添加到wwwroot?
我已经与这种配置斗争了好几天了,无论我做什么,我都无法让它完全工作。有人可以帮我吗??
我正在使用这里描述的这个解决方案:https : //github.com/JrCs/docker-letsencrypt-nginx-proxy-companion它适用于我的所有其他容器,但不适用于 gitlab。使用此方法,只有 gitlab 登录页面在绿色挂锁和文本 Secure 消失后才能完全保护,并且 https 告诉我;“您与该站点的连接并不完全安全”。我已经检查了 gitlab 容器内的日志,它发现 ssl 证书很好,并且没有给出其他错误或表明出现问题的迹象。任何人?
文件:start.up
#!/bin/bash
docker run -d \
--name ng \
-p 80:80 \
-p 443:443 \
-v /etc/nginx/conf.d \
-v /root/network/nginx/vhost.d:/etc/nginx/vhost.d \
-v /root/network/nginx/html:/usr/share/nginx/html \
-v /root/network/nginx/certs:/etc/nginx/certs:ro \
-e DEFAULT_HOST=domain.com \
-e VIRTUAL_PROTO=https \
-e VIRTUAL_PORT=443 \
--label com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy \
nginx
docker run -d \
--name ngg \
--volumes-from ng \
-v /root/network/nginx/templates:/etc/docker-gen/templates:ro \
-v /var/run/docker.sock:/tmp/docker.sock:ro \
--label com.github.jrcs.letsencrypt_nginx_proxy_companion.docker_gen \
jwilder/docker-gen \
-notify-sighup nginx …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的 IIS 上设置 URL 重写,以便它处理 http 并让我们加密。我的目标是以下
1) 所有到http://example.com、http://www.example.com和https://www.example.com 的流量都应该重定向 (301) 到https://example.com
2) 应保留任何子页面和查询字符串,以便http://www.example.com/whatever/login.aspx?username=blabla变为https://example.com/whatever/login.aspx?username=blabla
3) 对http://example.com/.well-known/acme-challenge/ * 和http://www.example.com/.well-known/acme-challenge/ * 的所有请求(其中“*”可以是任何子页面和查询字符串)不应该被重定向
就像我已经尝试过一切,但我无法让它发挥作用。
我尝试通过Node.js使用SSL,但由于,它无法正常工作permission denied。
try {
var TLSoptions = {
key: fs.readFileSync("/etc/letsencrypt/live/domain.work/privkey.pem"),
cert: fs.readFileSync("/etc/letsencrypt/live/domain.work/cert.pem")
};
https.createServer(TLSoptions, app).listen(port, host, function() {
console.log("TLS Website started.")
}); catch(e) {
console.log(e)
}
Run Code Online (Sandbox Code Playgroud)
=>
{ Error: EACCES: permission denied, open '/etc/letsencrypt/live/domain.work/privkey.pem'
at Object.fs.openSync (fs.js:663:18)
... (Librarys dump)
errno: -13,
code: 'EACCES',
syscall: 'open',
path: '/etc/letsencrypt/live/domain.work/privkey.pem' }
Run Code Online (Sandbox Code Playgroud)
因此,我尝试重新制作* .pem文件。
rm -f /etc/letsencrypt/live
rm -f /etc/letsencrypt/archive
rm -f /etc/letsencrypt/renewal
sudo ./letsencrypt-auto certonly -a standalone -d domain.work
Run Code Online (Sandbox Code Playgroud)
并检查文件权限。
/etc/letsencrypt/live/domain.work$ ls -lsa
total 12
4 drwxr-xr-x 2 root root …Run Code Online (Sandbox Code Playgroud) 我最近使用以下命令从 heroku 上的免费帐户升级到业余帐户:
heroku ps:resize web=hobby
Run Code Online (Sandbox Code Playgroud)
我使用以下命令启用了自动证书管理:
heroku certs:auto:enable
Run Code Online (Sandbox Code Playgroud)
等了几个小时后,我决定运行:
heroku certs:auto
Run Code Online (Sandbox Code Playgroud)
根据我的状态描述,它运行正常。
我什至运行了以下命令:
curl -vI https://www.yaknchat.com
Run Code Online (Sandbox Code Playgroud)
这告诉我我的服务器认证验证没问题。
但是,当我在浏览器中输入https://www.yaknchat.com时,它告诉我“此连接不完全安全”,而不是通常的响应“此连接不安全”。
我做错了什么。我应该进入我的 namescheap 高级 DNS 设置并更改 CNAME 或 AAA 记录吗?另外,是否需要使用 SSL Endpoint(heroku 插件)来为我的应用 url 获取安全的绿色条?
我使用 Certbot 容器通过 Letsencrypt 生成证书:
$ mkdir /home/$USER/letsencrypt
$ docker run -it --rm -p 80:80 -p 443:443 -v /home/$USER/letsencrypt:/etc/letsencrypt certbot/certbot certonly --standalone --email user@example.com --agree-tos -d example.com
Run Code Online (Sandbox Code Playgroud)
我导航到生成的证书:
$ cd /home/$USER/letsencrypt/live/example.com
Run Code Online (Sandbox Code Playgroud)
我可以验证chain.pem:
$ openssl verify chain.pem
chain.pem: OK
Run Code Online (Sandbox Code Playgroud)
我可以看到里面有什么chain.pem:
$ openssl x509 -noout -in chain.pem -subject -issuer
subject=C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
issuer=O = Digital Signature Trust Co., CN = DST Root CA X3
Run Code Online (Sandbox Code Playgroud)
我无法验证cert.pem(大概是因为它需要链):
$ …Run Code Online (Sandbox Code Playgroud) 我已经使用 cert-manager 和letsencrypt 将我的 Kubernetes 配置为对我的所有应用程序使用一个通配符 SSL 证书,现在的问题是我无法配置子域重定向,因为 Ingress 有点“僵硬”。这是我试图实现这一目标的方法:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-wildcard-ingress
namespace: mynamespace
annotations:
kubernetes.io/ingress.class: nginx
certmanager.k8s.io/cluster-issuer: letsencrypt-prod
certmanager.k8s.io/acme-challenge-type: dns01
certmanager.k8s.io/acme-dns01-provider: azuredns
ingress.kubernetes.io/force-ssl-redirect: "true"
ingress.kubernetes.io/ssl-redirect: "true"
spec:
rules:
- host: "domain.com"
http:
paths:
- path: /
backend:
serviceName: some-service
servicePort: 3000
- host: somesub.domain.com
http:
paths:
- path: /
backend:
serviceName: some-other-service
servicePort: 80
- host: othersub.domain.com
http:
paths:
- path: /
backend:
serviceName: one-more-service
servicePort: 8080
- host: "*.domain.com"
http:
paths:
- path: …Run Code Online (Sandbox Code Playgroud) wildcard-subdomain kubernetes lets-encrypt kubernetes-ingress cert-manager
lets-encrypt ×10
https ×2
nginx ×2
ssl ×2
asp.net-core ×1
c# ×1
cert-manager ×1
certbot ×1
docker ×1
gitlab ×1
haproxy ×1
heroku ×1
iis ×1
kubernetes ×1
node.js ×1
openssl ×1