0

我有以下dockerfile:

FROM alpine:3.8
RUN apk add --no-cache apache2 apache2-ssl php7-cli php7-apache2 php7-openssl
RUN mkdir /run/apache2/ && \
  echo '<?php \
var_dump(openssl_get_cipher_methods());' > 
/var/www/localhost/htdocs/index.php
CMD ["httpd", "-DFOREGROUND"]

现在,当我通过 apache 访问 index.php 时,我看到 40 个密码,当我运行容器时

docker run --rm -p sample php /var/www/localhost/htdocs/index.php

我看到了 180 个密码。如果我通过 apache 删除apache2-ssl包并重试,我现在可以看到所有 180 个密码。我试图在mod_ssl指令上启用所有密码,但没有任何帮助。我对 AES 的流密码(CTR、OFB、CFB)特别感兴趣

谢谢

4

1 回答 1

1

您会看到更少的密码,因为 apache2-ssl 有一个带有 SSLCipherSuite 过滤器的默认配置

/etc/apache2/conf.d/ssl.conf

SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES:!ADH

包 apache2-ssl 依赖于 libressl 而不是 openssl。libressl 是 openssl 的一个分支,并且大部分是兼容的。使用命令显示 openssl 和 libressl 的密码套件openssl ciphers

php7-openssl 是一个最初针对 openssl 编写的 php 模块。在 Alpine 3.8 中,php7 使用选项--with-system-ciphers https://git.alpinelinux.org/cgit/aports/tree/community/php7/APKBUILD?h=3.8-stable#n290编译

除非配置了显式密码列表,否则使用 php7-openssl 的默认密码列表,无需验证 /lib/libssl.so 是否真的支持它们 https://github.com/php/php-src/blob/PHP- 7.2.8/ext/openssl/xp_ssl.c#L1608

php7-openssl 中的默认密码列表在此处定义 https://github.com/php/php-src/blob/PHP-7.2.8/ext/openssl/php_openssl.h#L61

我假设您可以根据配置文件 http://php.net/manual/en/context.ssl.php#context.ssl 在 /etc/php7/conf.d/00_openssl.ini 中指定密码列表。密码

要支持 AES 分组密码模式 CTR、OFB、CFB,/lib/ssl.so 库必须支持它们,因此您可能必须重建 libressl2.7-libssl

于 2018-08-15T11:13:49.857 回答