AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 765153
Accepted
Christos Hayward
Christos Hayward
Asked: 2016-03-22 09:32:15 +0800 CST2016-03-22 09:32:15 +0800 CST 2016-03-22 09:32:15 +0800 CST

如何使用 Let's Encrypt (letsencrypt.org) 作为免费的 SSL 证书提供者?

  • 772

我有一些使用 StartSSL 免费证书(CJSHayward.com、JobhuntTracker.com)运行的站点,Firefox 拒绝 StartSSL 并显示一个错误页面,指出我的服务器配置不正确(IIRC),因为证书链。我寻求帮助并确认我的 VirtualHost(可应要求提供)用于证书链,并且我已正确安装了中间证书。这些网站在 Chrome、Safari、Edge 或 Opera 中显示时没有出现我所知道的错误。

经过一番搜索,让我们加密吧!看起来很有吸引力,不久之后,我就拥有了(AFAICT)一个私钥和一个用于 /etc/apache2/sites-enabled 下的每个域的证书,当然减去任何不再属于我的域。我想我会进行试运行,并与现在仅在 HTTP: JSH.name下可用的站点建立 HTTPS 连接。我移动了“让我们加密!” 证书和私钥到我的 SSL 目录并添加:

<VirtualHost *:443>
        ServerAdmin [email protected]
        DocumentRoot /home/jonathan/stornge
        SSLEngine On
        SSLCertificateFile /etc/apache2/ssl/0000_csr-letsencrypt.pem
        SSLCertificateKeyFile /etc/apache2/ssl/0000_key-letsencrypt.pem
        ServerName jsh.name
        ServerAlias www.jsh.name
        LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
        CustomLog /home/jonathan/logs/stornge.com combined
        <Directory /home/jonathan/stornge/>
            Options ExecCGI Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
        </Directory>
</VirtualHost>

然后我重新启动以查看我的工作,我发出的每个 HTTP 或 HTTPS 请求都被挂起。这包括带有我的 StartSSL 证书的 HTTPS 上的两个域,以及应该通过 HTTP 和 HTTPS 访问的 HTTPS 上新可用的域。我注释掉了 VirtualHost 并退回了 Apache,所有旧功能又恢复了正常工作。

我用过让我们“加密!”吗?正确吗?我有点怀疑,因为现有的 SSL 配置具有扩展名为 .key 的私钥、扩展名为 .crt 的证书以及扩展名为 .pem 的证书链文件。

检查 SSL 目录并发现 0000_csr.letsencrypt.pem 是模式 644 后,我再次尝试;我将该目录中的所有文件更改为模式 600。当我刚才尝试时,我得到了旧行为的重复:网站挂起所有请求,此外,还有apachectl restart一个声明(我忘记了确切的措辞) httpd 没有运行,计算机正在尝试启动它。

我怎样才能获得“Let's Encrypt”或其他一些没有疏远 Firefox 的工具的免费证书?

一个apachectl -v给出:

Server version: Apache/2.4.10 (Debian)
Server built:   Nov 28 2015 14:05:48

Auname -a给出:

Linux www 4.4.0-x86_64-linode63 #2 SMP Tue Jan 19 12:43:53 EST 2016 x86_64 GNU/Linux

- 更新 -

内容已删除,0000_key-letsencrypt.pem 受以下限制:

-----BEGIN PRIVATE KEY----- -----END PRIVATE KEY-----

对目录层次结构的查找产生:

root@www:/etc/letsencrypt# find `pwd` -print
/etc/letsencrypt
/etc/letsencrypt/keys
/etc/letsencrypt/keys/0000_key-letsencrypt.pem
/etc/letsencrypt/accounts
/etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org
/etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory
/etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/1ef8dc9b994b9b68a4e9c7cedd003be3
/etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/1ef8dc9b994b9b68a4e9c7cedd003be3/private_key.json
/etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/1ef8dc9b994b9b68a4e9c7cedd003be3/meta.json
/etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/1ef8dc9b994b9b68a4e9c7cedd003be3/regr.json
/etc/letsencrypt/更新
/etc/letsencrypt/options-ssl-apache.conf
/etc/letsencrypt/csr
/etc/letsencrypt/csr/0000_csr-letsencrypt.pem

目录 /home/jonathan/stornge 及其内容是世界可读和世界可执行的,这将产生影响。

- 更新 -

在这里添加一些实质性的东西:

http://OrthodoxChurchFathers.com Apache conf 文件有两个 VirtualHost,一个用于提供http://OrthodoxChurchFathers.com ,另一个用于将http://www.OrthodoxChurchFathers.com请求重定向到http://OrthodoxChurchFathers.com。包含两个 VirtualHost 的 .conf 文件是:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName orthodoxchurchfathers.com
    #ServerAlias www.orthodoxchurchfathers.com fathers.jonathanscorner.com

DocumentRoot /home/cjsh/fathers/document_root
&lt;Directory />
    Options FollowSymLinks
    AllowOverride None
&lt;/Directory>
&lt;Directory /home/cjsh/fathers>
    Options ExecCGI FollowSymLinks Indexes MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
&lt;/Directory>

DirectoryIndex index.cgi index.html

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /doc/ "/usr/share/doc/"
&lt;Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
&lt;/Directory>

</VirtualHost>

&lt;VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.orthodoxchurchfathers.com
ServerAlias fathers.jonathanscorner.com
DocumentRoot /home/cjsh/oldmirror
RewriteEngine On
RewriteRule ^(.*)$ http://orthodoxchurchfathers.com$1 [R=301,L]
&lt;/VirtualHost></pre></code>

When I try to run it and request orthodoxchurchfathers.com alone, I get:

┌──────────────────────────────────────────────────────────────────────┐ │ We were unable to find a vhost with a ServerName or Address of │ │ orthodoxchurchfathers.com. │ │ Which virtual host would you like to choose? │ │ (note: conf files with multiple vhosts are not yet supported) │ │ ┌──────────────────────────────────────────────────────────────────┐ │ │ │1 008-stornge.conf | Multiple Names | │ │ │ │2 014-paraskeva.conf | paraskeva.jonathansco | │ │ │ │3 036-unixytalk.conf | unixtalk.jsh.name | │ │ │ │4 038-proxy.conf | Multiple Names | │ │ │ │5 027-anna.conf | Multiple Names | │ │ │ │6 044-jobhunt-tracker.creation.c | Multiple Names | │ │ │ │7 049-jsh.conf | Multiple Names | │ │ │ │8 001-steampunk.conf | | │ │ │ │9 006-blajeny.conf | Multiple Names | │ │ │ │10 032-videos.conf | Multiple Names | d│ │ │ └────↓(+)──────────────────────────────────────────────────30%─────┘ │ ├──────────────────────────────────────────────────────────────────────┤ │ │ └──────────────────────────────────────────────────────────────────────┘

The command I used was with ./letsencrypt-auto --debug certonly.

debian
  • 3 3 个回答
  • 1662 Views

3 个回答

  • Voted
  1. Best Answer
    warren
    2016-03-29T11:48:53+08:002016-03-29T11:48:53+08:00

    我已经编写了一对在 CentOS 上运行 Let's Encrypt SSL 证书的操作指南:初始设置和cronning 它。

    我的每个域(我使用 的文件命名约定z-<[sub-]domain-tld>.conf)Apache 配置文件如下所示:

    <VirtualHost *:80>
    ServerName domain.tld
    Redirect permanent / https://domain.tld/
    </VirtualHost>
    
    <VirtualHost *:443>
        SSLCertificateFile /etc/letsencrypt/live/domain.tld/cert.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/domain.tld/privkey.pem
        SSLCertificateChainFile /etc/letsencrypt/live/domain.tld/fullchain.pem
        DocumentRoot /var/www/domain
        ServerName domain.tld
        ErrorLog logs/domain-error_log
        CustomLog logs/domain-access_log \
              "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
        ServerAdmin [email protected]
    
        SSLEngine on
    
    <Files ~ "\.(cgi|shtml|phtml|php3?)$">
        SSLOptions +StdEnvVars
    </Files>
    <Directory "/var/www/cgi-bin">
        SSLOptions +StdEnvVars
    </Directory>
    
    SetEnvIf User-Agent ".*MSIE.*" \
             nokeepalive ssl-unclean-shutdown \
             downgrade-1.0 force-response-1.0
    
        <Directory "/var/www/domain">
             Options All +Indexes +FollowSymLinks
             AllowOverride All
             Order allow,deny
             Allow from all
        </Directory>
    
    </VirtualHost>
    

    我的 ssl.conf 看起来像这样:

    #SSL options for all sites
    Listen 443
    SSLPassPhraseDialog  builtin
    SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)
    SSLSessionCacheTimeout  300
    Mutex sysvsem default
    SSLRandomSeed startup file:/dev/urandom  1024
    SSLRandomSeed connect builtin
    SSLCryptoDevice builtin
    SSLCompression          off
    SSLHonorCipherOrder     on
    SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
    

    使用 Let's Encrypt 获得 SSL 证书(并使您的网站获得SSL Labs的“A”评级)非常简单 - 一旦您通过了 Apache 配置和 LE 命令行参数的一些奥秘。

    • 4
  2. user
    2016-09-09T13:59:24+08:002016-09-09T13:59:24+08:00

    我在 web 根模式下使用 EFF 的Certbot取得了很好的成功(因为在证书更新期间自动进程停止 web 服务器的想法,即使只是短暂的,让我感到害怕)。

    首先,安装 Certbot。如果您使用的是 Debian Jessie(在我写这篇文章时它是最新的),首先添加jessie-backports存储库,然后

    $ sudo apt-get install python-certbot-apache -t jessie-backports
    

    这将引入一些软件包以及 certbot 本身。

    然后,要在webroot模式下创建证书,运行类似

    $ sudo certbot certonly --webroot -w /srv/www/www.example.net/htdocs -d www.example.net
    

    您可以选择添加--register-unsafely-without-email以及--rsa-key-size X是否需要默认值(当前为 2048 位)以外的模数大小。-d fqdn.example.com可以重复任意次数,就像可以一样-w;每个都-w启动一组从目录提供的新域,域命名为-d. Let's Encrypt 不颁发通配符证书(这在他们的常见问题解答中提到),显然,也不是 Punycode 域名的证书。

    根据需要运行的用户,certbot至少在默认情况下,对/etc/letsencrypt. 以root身份运行它可能是最简单的。它将.well-known/acme-challenge在给定的 Web 根目录 ( -w) 下创建一个文件,让远程系统验证它是否可以通过 HTTP通过指定的域名访问,如果所有内容都检查出来,将在其中创建一堆 PEM 文件/etc/letsencrypt/archive/www.example.net以及一组相应的符号链接/etc/letsencrypt/live/www.example.net并打印友好的成功消息。

    如果一切顺利,您剩下要做的就是设置您的 Web 服务器,以使用在/etc/letsencrypt/liveHTTPS 的主机名子目录中找到的证书用于相关域。Apache 的绝对最低要求类似于:

    <VirtualHost *:443>
            ServerName www.example.net
            SSLEngine on
            SSLCertificateKeyFile /etc/letsencrypt/live/www.example.net/privkey.pem
            SSLCertificateFile /etc/letsencrypt/live/www.example.net/cert.pem
            SSLCertificateChainFile /etc/letsencrypt/live/www.example.net/chain.pem
    </VirtualHost>
    

    根据需要添加任何其他指令,验证使用apache2ctl -S并apache2ctl configtest检查所有内容,并使用apache2ctl graceful.

    不要忘记定期更新证书;目前,Let's Encrypt 证书在 90 天后过期。Debian 软件包附带了一个 cron 作业/etc/cron.d/certbot和一个 systemd 服务/lib/systemd/system/certbot.service来处理这个问题,或者您可以certbot renew手动运行。记得apache2ctl graceful开始使用新签发的证书;您可能需要调整 cron 作业或 systemd 服务以自动执行此操作。要将更新的证书自动加载到 Debian Jessie 上的 Apache,请考虑更新/lib/systemd/system/certbot.service以添加到该[Service]部分(注意:顺序很重要):

    ExecStartPost=/usr/sbin/apache2ctl configtest
    ExecStartPost=/usr/sbin/apache2ctl graceful
    

    如果Apache 配置文件通过,这样做将自动加载更新的证书,如果或失败configtest,则将 Certbot 列为失败单元。configtestgraceful

    • 1
  3. Tim
    2016-09-10T14:16:37+08:002016-09-10T14:16:37+08:00

    我发现客户端ACME运行良好,易于设置和使用,定期更新且易于更新,并且在 Amazon Linux 上运行良好。我已经写了一个教程,你可以在这里找到。

    通过下载 ACME 并进行设置开始

    https://github.com/hlandau/acme.git
    cp ./acmetool /usr/local/bin
    /usr/local/bin/acmetool quickstart
    

    申请证书

    ./acmetool want example.com www.example.com
    

    这就是我为挑战设置目录的方式 - 这是 Let's Encrypt 连接到您的服务器以进行验证的地方

    mkdir -p /var/www/acme-challenge/.well-known/acme-challenge
    chmod -R user:www-data /var/www/acme-challenge/*
    find /var/www/acme-challenge/ -type d -exec chmod 755 {} \;
    vi /var/www/acme-challenge/.well-known/acme-challenge/text.html   (add "hello world!" or similar)
    

    上面链接的网站上有更多的细节和评论,作者和社区很有帮助。

    • 1

相关问题

  • 关闭 FTP

  • 如何在同一台电脑上从 putty 连接 debian vmware

  • debian- 文件到包的映射

  • Debian Ubuntu 网络管理器错误 [关闭]

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve