我为内部项目设置了内部pypi服务器。
它在https://<USER>:<PASS>@<INTERAL>/pypi
托管,并附有自签名证书。
除extra-index-url
~/.pip/pip.conf
中使用cert = ...
的中央pypi服务器外,我还可以使用此存储库。由于我的服务器的证书是自签名的,并且pip没有使用经过认证的系统范围(密钥链),我已经在配置文件中使用extra-index-url = https://<USER>:<PASS>@<INTERAL>/pypi
cert = /path/to/cert.pem
了解它:< / p>
pip install
现在,无论何时使用https://pypi.python.org
安装内容,我都会收到警告,证明无法验证$ pip install <PACKAGE-NAME>
Collecting <PACKAGE-NAME>
Could not fetch URL https://pypi.python.org/simple/<PACKAGE-NAME>/:
There was a problem confirming the ssl certificate: [SSL:
CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590) -
skipping
的证书:
img{
width:500px;
height 100px;
top:10px;
left:10px;
-webkit-box-shadow: 10px 10px 5px 0px rgba(0,0,0,1);
-moz-box-shadow: 10px 10px 5px 0px rgba(0,0,0,1);
box-shadow: 10px 10px 5px 0px rgba(0,0,0,1);
}
#image{
clip: rect(20px, 20px, 20px 20px);
}
有没有办法告诉pip只使用自签名证书 作为extra-index-url存储库?
答案 0 :(得分:1)
Pip使用它的证书包(文件),可以通过运行找到:
python -m pip._vendor.requests.certs
捆绑包只是一个接一个连接证书的文件。我们想告诉pip使用那些AND我们的证书, 所以使用
生成一个新文件cat $(python -m pip._vendor.requests.certs) /path/to/my/cert.pem > /path/to/my/bundle.pem
并确保您的.pip/pip.conf
文件包含以下内容:
[global]
extra-index-url = https://user:pass@my-pypi.com
cert = /path/to/my/bundle.pem
最后,您可能希望定期更新/path/to/my/bundle.pem
(在cronjob或其他任何内容中)。
我也遇到以下错误:
SubjectAltNameWarning: Certificate for my-pypi.com has no `subjectAltName`, falling back to check for a `commonName` for now. This feature is being removed by major browsers and deprecated by RFC 2818. (See https://github.com/shazow/urllib3/issues/497 for details.)
通常,您可以创建类似以下内容的证书:
openssl req -new -x509 -nodes -key my.key -out cert.csr -days 365
而是将openssl.cnf
(可能在/etc/pki/tls/openssl.cnf
)复制到您的工作目录,并通过在文件末尾添加以下内容来添加扩展名:
[ san_env ]
subjectAltName=DNS:mypypi.com
并使用
生成证书openssl req -new -x509 -nodes -key my.key -out cert.csr -days 365 -config openssl.cnf -extensions san_env
此外,pip希望您的证书采用不同的格式,可以使用
生成openssl x509 -inform der -in cert.cer -out cert.pem
如上所述,此文件cert.pem
可以与python ca包连接,以生成自定义包。