美文网首页
升级 openssl 及 Python 禁用不安全的SSL协议版

升级 openssl 及 Python 禁用不安全的SSL协议版

作者: creepycool | 来源:发表于2020-06-16 19:51 被阅读0次

    升级 openssl 及 Python 禁用不安全的SSL协议版本

    一、 环境介绍

    系统:Redhat 5.4
    Python:系统原始为Python2.4,升级到Python-2.7.13
    GCC:4.1.2 编译openssl需要4.2以上,因此升级gcc至5.4
    openssl: 0.9.8,升级到1.0.2


    二、编译gcc 5.4.0

    系统自带的gcc为4.1.2版本,编译openssl时会报编译器错误,从这个帖子中得知4.2是支持的最低的版本,因此,需要升级gcc到4.2版本以上。这里我们将编译5.4.0版本的gcc。

    1. 将gcc-5.4.0的源码包解压,准备进行编译安装。

    tar zxvf gcc-5.4.0.tar.gz
    cd gcc-5.4.0
    

    2. 下载依赖包

    ./contrib/download_prerequisites
    

    3. 配置编译参数

    cd ..
    mkdir gcc-build-5.4.0
    cd gcc-build-5.4.0
    ../gcc-5.4.0/configure \
    --enable-checking=release \
    --enable-languages=c,c++ \
    --disable-multilib
    

    4. 编译并安装

    make -j4  #允许4个编译命令同时执行,加速编译过程
    make install
    

    5. 检查编译是否成功

    gcc编译完成后默认会安装至/usr/local/bin

    $ /usr/local/bin/gcc -v
    ...
    gcc version 5.4.0 (GCC)
    ...
    

    6. 配置PATH指向新的gcc

    在命令行中临时将PATH修改为优先从/usr/local/bin中查找命令

    export PATH=/usr/local/bin/:$PATH
    

    三、编译安装openssl

    升级完gcc,就可以编译openssl了

    1. 下载源码

    编译环境为Redhat5.4,openssl版本比较低,是0.9.8e-fips-rhel5,因此,需要将openssl升级到1.0.2以上。
    首先,从openssl官方网站下载1.0.2版本的openssl源码。

    wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2u.tar.gz
    

    2. 配置编译参数

    因为openssl与系统中很多程序息息相关,为了避免升级openssl给系统带来的未知影响,我们不能用新的openssl覆盖系统中原始的openssl,因此,在编译之前,进行一些编译参数的配置,并将openssl安装在/opt/openssl-1.0.2目录下。

    ./config \
    --prefix=/opt/openssl-1.0.2 \
    --openssldir=/opt/openssl-1.0.2 \
    enable-ec_nistp_64_gcc_128 \
    -fPIC
    

    3. 编译与安装开始编译

    执行以下命令:

    $ make depend
    $ make
    $ make install
    

    编译完成,看下openssl版本

    $ /opt/openssl-1.0.2/bin/openssl version
    OpenSSL 1.0.2u  20 Dec 2019
    

    四、重新编译python并使用新的openssl

    1. 准备源码

    wget https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tgz
    
    tar zxvf Python-2.7.13.tgz
    cd Python-2.7.13
    

    2. 修改编译脚本,指向新的openssl路径

    修改setup.py,增加我们自定义的openssl路径/opt/openssl-1.0.2/include/opt/openssl-1.0.2/lib

    # Detect SSL support for the socket module (via _ssl)
    search_for_ssl_incs_in = [
                            '/usr/local/ssl/include',
                            '/opt/openssl-1.0.2/include',
                            '/usr/contrib/ssl/include/'
                            ]
    ssl_incs = find_file('openssl/ssl.h', inc_dirs,
                            search_for_ssl_incs_in
                            )
    if ssl_incs is not None:
        krb5_h = find_file('krb5.h', inc_dirs,
                            ['/usr/kerberos/include'])
        if krb5_h:
            ssl_incs += krb5_h
    ssl_libs = find_library_file(self.compiler, 'ssl',lib_dirs,
                                    ['/usr/local/ssl/lib',
                                    '/opt/openssl-1.0.2/lib',
                                    '/usr/contrib/ssl/lib/'
                                    ] )
    

    继续修改Modules/Setup.dist配置文件
    找到下列SSL所在行并按下列内容修改,其中SSL为openssl自定义安装的路径

    # Socket module helper for SSL support; you must comment out the other
    # socket line above, and possibly edit the SSL variable:
    SSL=/opt/openssl-1.0.2
    _ssl _ssl.c \
            -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
            -L$(SSL)/lib -lssl -lcrypto
    
    

    3. 编译与安装

    编译参数的配置:

    ./configure \
    --prefix=/opt/python2.7.13 \
    --enable-shared
    

    编译并安装

    make
    make install
    

    安装完毕,执行以下命令测试Python是否使用了新的openssl

    $ python -c 'import ssl; print(ssl.OPENSSL_VERSION)'
    OpenSSL 1.0.2u  20 Dec 2019
    

    五、修改SSL连接代码,禁用不安全的SSL协议版本

    1. 修改server端SSL连接代码

    在server端禁用了SSLv3 SSLv2 TLS1.0 TLS1.1这几个版本

    context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
    context.options |= ssl.OP_NO_SSLv3
    context.options |= ssl.OP_NO_SSLv2
    context.options |= ssl.OP_NO_TLSv1
    context.options |= ssl.OP_NO_TLSv1_1
    

    2. 修改client端SSL连接代码

    采用client端与server端支持的最高协议版本进行通信
    在client端

    context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
    

    相关文章

      网友评论

          本文标题:升级 openssl 及 Python 禁用不安全的SSL协议版

          本文链接:https://www.haomeiwen.com/subject/bhzrxktx.html