我正在使用 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 列表中。
是否可以?怎么做?
我想知道是否可以对 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) 我在 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)
但我找不到对https://xx.xx.xx.xx执行相同操作的方法
有人可以帮我吗?
** 我在用:**
让我们加密证书
阿帕奇2.4
我正在尝试为我的网站获取 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) 当我测试网站的 SSL 时,我收到来自https://www.ssllabs.com/ssltest/analyze.html?d=api.quotecrunchers.com的错误“链问题:顺序错误,额外证书” 。
我使用以下命令将 https 机制构建到 Spring Boot 应用程序中:
用于与 Let's Encrypt CA 通信的 acme4j 库。
用于将 Let's Encrypt 证书写入 java 密钥库的 Java 代码。
Java 代码使嵌入式 Tomcat 服务器通过 HTTP 从 Let's Encrypt 申请证书,然后在获得证书后重新使用 HTTPS。
我计划在整理完该代码后将其开源。
但目前,我仅使用 ssllabs.com 获得了 B 评级
请参阅https://www.ssllabs.com/ssltest/analyze.html?d=api.quotecrunchers.com
我的 https 有几个问题,但我关心的问题是“链问题:顺序错误,额外的证书”。
为什么我会得到这个,我应该做什么?
任何帮助是极大的赞赏!
我正在尝试在 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) 我用 Let's Encrypt 生成了 SSL 证书,他们生成了文件:
证书.pem | 链.pem | fullchain.pem | privkey.key | 私钥文件
使用以下命令,我可以成功打开除 privkey.key和privkey.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) 我已在本地安装了 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 …
我在这里尝试做的事情如下:我有一个由计时器控制的 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,导致脚本失败。
我在这件事上做错了吗?有没有更好的方法来实现我想要做的事情?
我需要从 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) lets-encrypt ×10
ssl ×5
nginx ×4
certbot ×3
apache ×1
bash ×1
certificate ×1
dns ×1
docker ×1
encryption ×1
ip ×1
kubernetes ×1
openssl ×1
restriction ×1
systemd ×1
ubuntu ×1
vhosts ×1