在 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/\*