标签: lets-encrypt

如何将 ssl 密码添加到 nginx 中的 ssl_ciphers

我正在使用 Let's Encrypt 在我的服务器中安装免费的 TLS/SSL 证书。我按照Mozilla SSL 配置生成器的建议并像这样配置了 nginx:

ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
Run Code Online (Sandbox Code Playgroud)

问题是我需要 Java 7 才能与服务器通信,但它不适用于上述配置。

当我将我的网站提交给ssllabs 时,我收到以下消息:

Java 7u25   Server sent fatal alert: handshake_failure
Run Code Online (Sandbox Code Playgroud)

如果我只是在 nginx 配置中评论 ssl_ciphers 行,那么与 Java 7 的通信就会开始工作。

# After commenting the line below it works
# ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
Run Code Online (Sandbox Code Playgroud)

所以我从ssllabs收到以下消息:

Java 7u25   RSA 2048 (SHA256)   TLS 1.0 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
Run Code Online (Sandbox Code Playgroud)

我不想让 ssl_ciphers 行注释,因为 nginx 将使用其默认配置,这不太安全。

我只想将密码 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 添加到 ssl_ciphers 列表中。

是否可以?怎么做?

encryption ssl nginx lets-encrypt

1
推荐指数
1
解决办法
4403
查看次数

Nginx if 对 ssl 证书的声明

我想知道是否可以对 nginx ssl 证书(或配置的任何其他部分)执行 if 语句

if ( -f /etc/letsencrypt/live/{domain}/cert.pem ) {
  ssl_certificate /etc/letsencrypt/live/{domain}/cert.pem;
  ssl_certificate_key /etc/letsencrypt/live/{domain}/privkey.pem;
}
Run Code Online (Sandbox Code Playgroud)

这给出了以下错误:

nginx: [emerg] "ssl_certificate" directive is not allowed here in /etc/nginx/sites-enabled/app.phase.be.conf:7
Run Code Online (Sandbox Code Playgroud)

我查看了文档和谷歌,得出的结论是这是不可能的。它仅用于重写。

在 Letsencrypt 颁发证书之前,是否有另一种方法可以完全忽略 ssl 证书或将其替换为自签名证书。这是一个自动化的过程,Nginx 可以随时重新加载,如果它被另一个进程触发(例如修改的服务器块)

编辑:

感谢@Chris 指出正确的方向!

我最终做的看起来像这样,但这是精简和简化的。

config = Config().read()
logging.basicConfig(filename=config['settings']['log_file'],
                      filemode='a',
                      format='%(asctime)s [ %(levelname)s ] - %(message)s',
                      datefmt='%m/%d/%Y  %H:%M:%S',
                      level=config['settings']['log_level'])

class NginxHandler(PatternMatchingEventHandler):
    patterns = ["*.conf", "*.cnf"]

    def process(self, event):
        logging.info('PROXY-LISTENER: Vhost configuration has changed reloading Nginx')
        time.sleep(1)
        subprocess.call(['nginx', '-s', 'reload'])

    def on_modified(self, event):
        self.process(event)

    # def on_created(self, …
Run Code Online (Sandbox Code Playgroud)

ssl nginx vhosts lets-encrypt

1
推荐指数
1
解决办法
2905
查看次数

Apache:限制通过 IP (HTTP/HTTPS) 访问网络服务器

我在 VPS 上运行一个网站,我想完全阻止通过 VPS IP 地址访问该网站。我让它适用于 HTTP,但似乎不可能适用于 HTTPS。我做了什么:

<VirtualHost *:80>
ServerName xxx.xxx.xxx.xxx
Redirect 403 /
DocumentRoot /a/folder/here/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

这完全符合http://xx.xx.xx.xx的预期

我找不到对https://xx.xx.xx.xx执行相同操作的方法

有人可以帮我吗?

** 我在用:**

让我们加密证书

阿帕奇2.4

apache ip restriction lets-encrypt

1
推荐指数
1
解决办法
4605
查看次数

如何让在 docker 和 gunicorn 上作为网络服务器运行的letsencrypt Flask 应用程序..?

我正在尝试为我的网站获取 SSL,我尝试使用我遵循的许多教程来完成它,是的,我可以做到,但其中许多教程主要使用 nginx 作为网络服务器。
但是..现在我想为我的网站获取 SSL,该网站在 docker 和 gunicorn 上作为网络服务器运行。
我遵循了许多教程和来源,但我做不到。所以..如何做到这一点。?,
任何源示例或教程将不胜感激......?
这是我的Dockerfile

FROM python:3.6.5-stretch

MAINTAINER Irwan Santosa

RUN apt-get update && apt-get install -y build-essential libpq-dev

ENV INSTALL_PATH_DOCKER /web_app_docker

RUN mkdir -p $INSTALL_PATH_DOCKER

WORKDIR $INSTALL_PATH_DOCKER

COPY requirements.txt requirements_docker.txt

RUN pip install -r requirements_docker.txt

COPY . .

CMD gunicorn -b 0.0.0.0:80 --access-logfile - "web_app.app:create_app()"
Run Code Online (Sandbox Code Playgroud)

这是我的 docker-compose.yml

version: '3'

services:
  web_app_docker:
    build: .
    command: >
      gunicorn -b 0.0.0.0:80
      --access-logfile -
      --reload
      "web_app.app:create_app()"

    volumes:
      - '.:/web_app_docker'

    ports:
      - …
Run Code Online (Sandbox Code Playgroud)

nginx docker lets-encrypt

1
推荐指数
1
解决办法
1113
查看次数

SSL 实验室:顺序错误、额外证书

当我测试网站的 SSL 时,我收到来自https://www.ssllabs.com/ssltest/analyze.html?d=api.quotecrunchers.com的错误“链问题:顺序错误,额外证书” 。

我使用以下命令将 https 机制构建到 Spring Boot 应用程序中:

  1. 用于与 Let's Encrypt CA 通信的 acme4j 库。

  2. 用于将 Let's Encrypt 证书写入 java 密钥库的 Java 代码。

  3. Java 代码使嵌入式 Tomcat 服务器通过 HTTP 从 Let's Encrypt 申请证书,然后在获得证书后重新使用 HTTPS。

我计划在整理完该代码后将其开源。

但目前,我仅使用 ssllabs.com 获得了 B 评级

请参阅https://www.ssllabs.com/ssltest/analyze.html?d=api.quotecrunchers.com

我的 https 有几个问题,但我关心的问题是“链问题:顺序错误,额外的证书”

为什么我会得到这个,我应该做什么?

任何帮助是极大的赞赏!

ssl lets-encrypt

1
推荐指数
1
解决办法
7168
查看次数

如何测试 ClusterIssuer 求解器?

我正在尝试在 DigitalOcean 上使用 LetsEncrypt 部署带有 SSL 证书的 Kubernetes 集群。我遵循了这些说明,一切正常,直到 ClusterIssuer 创建挑战订单。然后我收到这个错误:

cert-manager/controller/orders "msg"="Failed to determine the list of Challenge resources needed for the Order" "error"="no configured challenge solvers can be used for this challenge" "resource_kind"="Order" "resource_name"="letsencrypt-prod-cert-458163912-1173127706"
Run Code Online (Sandbox Code Playgroud)

我已经尝试过使用 http 并尝试配置 DigitalOcean 的dns01解析器,但都不起作用,并且出现了类似的错误。该站点通过 ip 和 dns 名称上线(尽管我收到了 no-ssl 证书警告)。这是 ClusterIssuer 描述:

Name:         letsencrypt-issuer
Namespace:
Labels:       app/instance=webapp
              app/managed-by=Tiller
              app/name=webapp
              app/version=0.1.0
              helm.sh/chart=webapp-0.1.0
Annotations:  cert-manager.io/cluster-issuer: letsencrypt-issuer
              kubernetes.io/ingress.class: nginx
              kubernetes.io/tls-acme: true
API Version:  cert-manager.io/v1alpha2
Kind:         ClusterIssuer
Metadata:
  Creation Timestamp:  2019-10-16T23:24:47Z
  Generation:          2 …
Run Code Online (Sandbox Code Playgroud)

digital-ocean kubernetes lets-encrypt

1
推荐指数
1
解决办法
1万
查看次数

无法打开 SSL 私钥 [期望:可信证书]

我用 Let's Encrypt 生成了 SSL 证书,他们生成了文件:

证书.pem | 链.pem | fullchain.pem | privkey.key | 私钥文件

使用以下命令,我可以成功打开 privkey.keyprivkey.pem之外的所有文件:

openssl x509 -in [filename] 
Run Code Online (Sandbox Code Playgroud)

这是错误消息:

无法加载证书 140505945014720:error:0909006C:PEMroutines:get_name:no start line:../crypto/pem/pem_lib.c:745:Expecting: Trusted CERTIFICATE

一些文章建议我们需要使用以下命令转换为.der扩展名,但仍然存在相同的错误(“无法加载”):

openssl x509 -in privkey.pem -outform der -out privkey.der
Run Code Online (Sandbox Code Playgroud)

ubuntu openssl lets-encrypt

1
推荐指数
1
解决办法
2万
查看次数

nginx docker 容器无法读取 certbot 证书

我已在本地安装了 certbot 并成功为 mydomain.blah 和 site1.mydomain.blah 创建证书,它们位于/etc/letsencrypt/live/mydomain.blah/etc/letsencrypt/live/site1.mydomain.blah

现在我尝试在 nginx 容器内使用它们,因此在我的 docker-compose 中我映射了一个如下所示的卷:

version '3.4'

services:
  webserver:
    image: nginx
    volumes:
      - ./conf:/etc/nginx/conf.d
      - /etc/letsencrypt/live:/cert
    ports:
      - "80:80"
      - "443:443"
Run Code Online (Sandbox Code Playgroud)

我的 nginxconf 就像这样:

server {
    listen       443 ssl;
    server_name  mydomain.blah;

    ssl_certificate /cert/mydomain.blah/fullchain.pem;
    ssl_certificate_key /cert/mydomain.blah/privkey.pem;

    location / {
        proxy_pass http://1.2.3.4:8080;
    }
}

server {
    listen       443 ssl;
    server_name  site1.mydomain.blah;

    ssl_certificate /cert/site1.mydomain.blah/fullchain.pem;
    ssl_certificate_key /cert/site1.mydomain.blah/privkey.pem;

    location / {
        proxy_pass http://4.3.2.1:8080;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我启动 docker-compose 时,nginx 因错误而退出,cannot load certificate "/cert/mydomain.blah/fullchain.pem"因为存在No …

ssl nginx docker-compose lets-encrypt certbot

1
推荐指数
1
解决办法
2735
查看次数

让 certbot 等待另一个实例

我在这里尝试做的事情如下:我有一个由计时器控制的 systemd 服务,该计时器负责处理 LetsEncrypt 证书的更新。这些证书的外观在配置文件中规定。

[Unit]
Description=Let's Encrypt renewal

[Service]
Type=oneshot
Environment=CONFIG_FILE=/etc/letsencrypt/test.conf
ExecStart=-/usr/bin/certbot renew --quiet --agree-tos --noninteractive --no-random-sleep-on-renew
Run Code Online (Sandbox Code Playgroud)

续订会运行一些后处理脚本,以确保部署和安装证书。

如果配置在证书生成和上次续订之间发生更改,这些脚本将找不到预期名称下的证书。然后,这些脚本会自动触发另一个脚本,以确保创建证书:

if [[ ! -d /etc/letsencrypt/live/${CERT_NAME} ]]
then
  #certificate folder we expect isn't there , request a new cert
  . /etc/letsencrypt/renewal-hooks/request-new-cert.sh
fi
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是在执行 request-new-cert.sh 期间出现错误Another Instance of Certbot is already running,导致脚本失败。

我在这件事上做错了吗?有没有更好的方法来实现我想要做的事情?

bash certificate systemd lets-encrypt certbot

1
推荐指数
1
解决办法
8295
查看次数

通过 DNS 为 Route53 颁发证书时,Certbot 无法找到 AWS 凭证

我需要从 LetsEncrypt 获取 AWS Route 53 上托管的域的证书。我没有暴露任何端口 80 或 443,因为服务器用于 VPN 并且没有公共访问权限。

因此,实现此目的的唯一方法是通过路由 53 的 DNS 验证。

到目前为止我已经安装了 certbot 和 dns-route53 插件

sudo snap install --beta --classic certbot
sudo snap set certbot trust-plugin-with-root=ok
sudo snap install --beta certbot-dns-route53
sudo snap connect certbot:plugin certbot-dns-route53
Run Code Online (Sandbox Code Playgroud)

我在我的 AWS 账户中创建了一个可以访问 Route53 的特殊用户,并且在 ~/.aws/config 和 ~/.aws/credentials 中添加了访问密钥 id 和秘密访问密钥,如下所示

[default]
aws_access_key_id=foo
aws_secret_access_key=bar
Run Code Online (Sandbox Code Playgroud)

基本上遵循此处给出的每个步骤:https ://certbot-dns-route53.readthedocs.io/en/stable/

现在,当我运行以下命令时:

sudo certbot certonly -d mydomain.com --dns-route53
Run Code Online (Sandbox Code Playgroud)

它给出以下输出:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator dns-route53, Installer None
Requesting …
Run Code Online (Sandbox Code Playgroud)

dns ssl amazon-route53 lets-encrypt certbot

1
推荐指数
1
解决办法
1604
查看次数