我们正在从 OSCommerce 网站切换到 Magento,并且也在切换服务器。旧服务器在 Apache 上,而新服务器在 NGINX 上。我们拥有的 SSL 证书似乎是从 GODADDY 购买的。
我几乎已经弄清楚如何将 SSL 证书从旧服务器转移到新服务器。但是有几个问题?
1. 重新密钥证书
我从旧的 OSCommerce 站点 apache 虚拟主机中发现了三种类型的 SSL 文件:
SSLCertificateFile /etc/apache2/ssl/11-2013/09********ss.crt
SSLCertificateKeyFile /etc/apache2/ssl/11-2013/server.key
SSLCertificateChainFile /etc/apache2/ssl/11-2013/gd_bundle.crt
我可以将它们复制到新服务器上的某个位置并在 NGINX 配置文件中引用它们吗?还是我需要生成一个新的 SSL 密钥?重新密钥crt文件(哪一个)?
2. NGINX 配置 NGINX的配置好像只需要引用两个文件Apache呢?
# Specify path to your SSL certificates.
#ssl_certificate /etc/nginx/certificates/yourcertificate.crt;
#ssl_certificate_key /etc/nginx/certificates/yourcertificate.key;
我应该为 NGINX 引用哪个 CRT 文件,另一个呢?
3. SSL 3.0 和 SHA1 当我检查我们的网站时DigiCert 的 SSL 检查器它说:
协议支持
TLS 1.0,SSL 3.0
SSL 3.0 是一个过时的协议版本,具有已知漏洞。
SSL 证书
通用名称 = ourdomain.com
主题备用名称 = ourdomain.com、www.ourdomain.com
发行者 = Go Daddy 安全认证机构
序列号 = *****************
SHA1 指纹 = ****************************
密钥长度 = 4096 位
签名算法 = SHA1 + RSA(已弃用)
安全重新协商:支持
我如何确保我们使用正确的协议和 SHA?这是我在新的 nginx 配置文件中更改的内容吗?
答案1
ssl_certificate_key
应该包含当前 server.key 中的内容,即服务器未加密的私钥。
ssl_certificate
应包含服务器的证书和证书链,如文档中所述,以该顺序。所以,这基本上就是cat 09********ss.crt gd_bundle.crt
一个方便的在线工具可以快速检查每个块到底-----BEGIN CERTIFICATE-----
包含-----END CERTIFICATE-----
什么https://www.sslshopper.com/certificate-decoder.html- 如果你有一台安装了 openssl 的机器,你当然可以使用
openssl x509 -in certificate.crt -text -noout
关于 SSL/TLS 配置,我喜欢这个Mozilla wiki 中的页面。它解释了您可能遇到的大多数首字母缩略词,并给出了有关合理配置的合理建议。有一个附带的在线工具,可以为 Apache、nginx、haproxy 和 AWS LB 创建参考设置,这里。例如,使用中间配置文件的 OCSP 装订和 HSTS 的完整 nginx 配置如下所示,但你需要明白这些资料是不断发展的因此应定期更新。
server {
listen 443 ssl;
# certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
ssl_certificate /path/to/signed_cert_plus_intermediates;
ssl_certificate_key /path/to/private_key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
# Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
ssl_dhparam /path/to/dhparam.pem;
# intermediate configuration. tweak to your needs.
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
add_header Strict-Transport-Security max-age=15768000;
# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;
## verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;
resolver <IP DNS resolver>;
....
}
一旦所有一切都准备就绪并经过测试,请前往ssllabs并运行测试。如果您遗漏了某些内容,您将看到还需要做什么。
答案2
第一部分:
SSLCertificateFile /etc/apache2/ssl/11-2013/09********ss.crt
这是您网站的公共证书。这是您将重新密钥以将 SHA1 更改为 SHA2。
SSLCertificateKeyFile /etc/apache2/ssl/11-2013/server.key
这是您的网络服务器的私人证书。
SSLCertificateChainFile /etc/apache2/ssl/11-2013/gd_bundle.crt
这是中间证书包,用于将您的 Web 服务器证书汇总到 godaddy 的根颁发机构(因为默认情况下,浏览器不一定信任它们的根证书)
这给出了有关如何配置 NGINX 以使用中间证书链的说明(您很可能需要这样做,因为您需要在 Apache 服务器上这样做):nginx 文档:配置 HTTPS 服务器
您不会在 NGINX 配置文件中更改证书配置。一旦证书具有功能,您就可以在配置文件中关闭和打开这些功能(根据 fvu 的回答),但首先您需要基本上“升级”证书本身。GoDaddy 有几篇文章可能对此有帮助,第一篇仅描述了您在进行此更改时所做的事情: https://www.godaddy.com/help/rekey-certificate-4976 第二部分告诉你如何使用他们的服务来实际做到这一点: https://www.godaddy.com/help/rekey-certificate-4976。
完成所有准备工作后,您可以使用 ssllabs 进行测试,但只有当您的新网站在 DNS 中的正确主机名上启动并运行时,这才会起作用(如果您在完成之前仍需要将网站运行在 Apache 上,则可能不想这样做)。假设您在 Linux/Unix 计算机上拥有 root 权限,则可以使用 openssl 进行测试:
输入新 NGINX 服务的 IP 地址作为要测试的站点的名称。这样您的主站点就会保留在 Apache 上,您只需告诉本地计算机在 NGINX 站点上找到它即可。完成此操作后,运行以下命令并查看其输出的内容:
openssl s_client -connect hostname:port
或者使用此命令,它会直接指向您正在检查的内容: https://stackoverflow.com/questions/26473076/how-do-i-check-if-my-ssl-certificate-is-sha1-or-sha2-on-the-commandline