在 Elastic Beanstalk 单实例上配置 SSL
Configuring SSL on Elastic Beanstalk Single Instance
我正在尝试为我的 NodeJS Beanstalk 实例安装 SSL 证书。按照这些 instructions from Amazon,我创建了 YAML 文件并插入了我的信息。
每次我尝试部署时都会收到此错误:
The configuration file .ebextensions/singlessl.config in application version 0.0.3 contains invalid YAML or JSON. YAML exception: while scanning for the next token found character '\t' that cannot start any token in "", line 10, column 1: ^ , JSON exception: Unexpected character (R) at position 0.. Update the configuration file.
我已经仔细梳理了这件事,在多个验证器中验证了它,甚至在多个 OS 上编写了它......但我似乎无法动摇这个假定的制表符。
有人在 JSON 中有这样的配置文件示例吗?我的其他配置在 JSON 中,效果很好。如果没有,谁能看出我做错了什么?
Resources:
sslSecurityGroupIngress:
Type: AWS::EC2::SecurityGroupIngress
Properties:
GroupId: {Ref : MyIDHere}
IpProtocol: tcp
ToPort: 443
FromPort: 443
CidrIp: 0.0.0.0/0
files:
/etc/nginx/conf.d/ssl.conf:
mode: "000755"
owner: root
group: root
content: |
# HTTPS server
server {
listen 443;
server_name localhost;
ssl on;
ssl_certificate /etc/pki/tls/certs/server.crt;
ssl_certificate_key /etc/pki/tls/certs/server.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://nodejs;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
/etc/pki/tls/certs/server.crt:
mode: "000400"
owner: root
group: root
content: |
-----BEGIN CERTIFICATE-----
CERT DATA HERE
-----END CERTIFICATE-----
/etc/pki/tls/certs/server.key:
mode: "000400"
owner: root
group: root
content: |
-----BEGIN RSA PRIVATE KEY-----
KEY DATA HERE
-----END RSA PRIVATE KEY-----
第 10 行有一个制表符。删除此选项卡应该可以解决您收到的错误。
当您从 Amazon 的说明中复制代码时,它复制了一个选项卡,这将导致此问题。我遇到了同样的问题,如果你检查 YAML 文件并确保没有奇怪的白色 space 字符,它应该可以正常工作。
对我来说,在使用适用于 HTTPS 的 AWS Beanstalk 单实例 SSL(针对 Docker env)完成相同的例程之后,在花时间弄清楚 YAML 和选项卡与 space(或没有 space 在我的编辑器(Atom/Packages/Whitespace)中的键页脚,或..)之后,甚至将 YAML 转换为 JSON(Atom/Packages/YAML_JSON 转换器),我已经意识到 初始密钥已损坏,必须生成一个新密钥集:
openssl genrsa 2048 > privatekey.pem
openssl req -new -key privatekey.pem -out csr.pem
openssl x509 -req -days 365 -in csr.pem -signkey privatekey.pem -out public.crt
# last line is for signing the rsa yourself for development purposes.
然后一切都成功了!所以我无法强调确保这些键正常工作的重要性。似乎解决这个问题的唯一方法是得到一些这样的错误:
PEM_read_bio_PrivateKey:ASN1
error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN
error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I: nested asn1 error
祝你好运!
P.S.: 哦,如果你 运行 进入 __MACOSX/ 错误就这样做:
zip -d Archive.zip __MACOSX/\*
我正在尝试为我的 NodeJS Beanstalk 实例安装 SSL 证书。按照这些 instructions from Amazon,我创建了 YAML 文件并插入了我的信息。
每次我尝试部署时都会收到此错误:
The configuration file .ebextensions/singlessl.config in application version 0.0.3 contains invalid YAML or JSON. YAML exception: while scanning for the next token found character '\t' that cannot start any token in "", line 10, column 1: ^ , JSON exception: Unexpected character (R) at position 0.. Update the configuration file.
我已经仔细梳理了这件事,在多个验证器中验证了它,甚至在多个 OS 上编写了它......但我似乎无法动摇这个假定的制表符。
有人在 JSON 中有这样的配置文件示例吗?我的其他配置在 JSON 中,效果很好。如果没有,谁能看出我做错了什么?
Resources:
sslSecurityGroupIngress:
Type: AWS::EC2::SecurityGroupIngress
Properties:
GroupId: {Ref : MyIDHere}
IpProtocol: tcp
ToPort: 443
FromPort: 443
CidrIp: 0.0.0.0/0
files:
/etc/nginx/conf.d/ssl.conf:
mode: "000755"
owner: root
group: root
content: |
# HTTPS server
server {
listen 443;
server_name localhost;
ssl on;
ssl_certificate /etc/pki/tls/certs/server.crt;
ssl_certificate_key /etc/pki/tls/certs/server.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://nodejs;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
/etc/pki/tls/certs/server.crt:
mode: "000400"
owner: root
group: root
content: |
-----BEGIN CERTIFICATE-----
CERT DATA HERE
-----END CERTIFICATE-----
/etc/pki/tls/certs/server.key:
mode: "000400"
owner: root
group: root
content: |
-----BEGIN RSA PRIVATE KEY-----
KEY DATA HERE
-----END RSA PRIVATE KEY-----
第 10 行有一个制表符。删除此选项卡应该可以解决您收到的错误。
当您从 Amazon 的说明中复制代码时,它复制了一个选项卡,这将导致此问题。我遇到了同样的问题,如果你检查 YAML 文件并确保没有奇怪的白色 space 字符,它应该可以正常工作。
对我来说,在使用适用于 HTTPS 的 AWS Beanstalk 单实例 SSL(针对 Docker env)完成相同的例程之后,在花时间弄清楚 YAML 和选项卡与 space(或没有 space 在我的编辑器(Atom/Packages/Whitespace)中的键页脚,或..)之后,甚至将 YAML 转换为 JSON(Atom/Packages/YAML_JSON 转换器),我已经意识到 初始密钥已损坏,必须生成一个新密钥集:
openssl genrsa 2048 > privatekey.pem
openssl req -new -key privatekey.pem -out csr.pem
openssl x509 -req -days 365 -in csr.pem -signkey privatekey.pem -out public.crt
# last line is for signing the rsa yourself for development purposes.
然后一切都成功了!所以我无法强调确保这些键正常工作的重要性。似乎解决这个问题的唯一方法是得到一些这样的错误:
PEM_read_bio_PrivateKey:ASN1 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I: nested asn1 error
祝你好运!
P.S.: 哦,如果你 运行 进入 __MACOSX/ 错误就这样做:
zip -d Archive.zip __MACOSX/\*