• Wagtail SearchBackend —— ElasticSearch7 https 连接问题


    SearchBackend 是 Wagtail 后台提供搜索的服务后端,支持Database ElasticSearch等。

    最近进行框架升级 2.14 -> 3.0.1,升级后出现了一些问题,其中一个就是搜索功能无法正常使用了

    经过调试查找Google等一堆操作后确定是一个bug(这句就是废话), 这个问题应该是从2.15版本产生的

    Wagtail的主页下看看,最终发现很久之前就有人提过Issue了,瞬间痛哭流涕,他乡遇故知啊。issue中倒是也有提供了解决思路,但是感觉不太好,也并不能完全解决。

    最终决定切换到Backend试一试,本地搭了个ElasticSearch,简单配置一下,功能正常使用。

    WAGTAILSEARCH_BACKENDS = {
        'default': {
            'BACKEND': 'wagtail.search.backends.elasticsearch7',
            'URLS': ['http://localhost:9200'],
            'INDEX': 'wagtail_search',
            'TIMEOUT': 5,
            'OPTIONS': {},
            'INDEX_SETTINGS': {},
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    于是就写申请要一个生产的elasticsearch服务,给了个地址配上去

    WAGTAILSEARCH_BACKENDS = {
        'default': {
            'BACKEND': 'wagtail.search.backends.elasticsearch7',
            'URLS': ['https://user-name:pwd@10.xx.xx.104:9200'],
            'INDEX': 'wagtail_search',
            'TIMEOUT': 5,
            'OPTIONS': {
                'use_ssl': True,
                'verify_certs': False,
            },
            'INDEX_SETTINGS': {},
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    因为是https嘛,所以就加了OPTIONS配置忽略证书,这点道理还是懂得。

    不出意外的话这个时候就该出现意外了,
    elasticsearch.exceptions.SSLError: ConnectionError([SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1129)) caused by: SSLError([SSL: CERTIFICATE_VERIFY_FAILED] certific ate verify failed: self signed certificate in certificate chain (_ssl.c:1129))
    真是踩屎的感觉,都设置False了还检测证书,查会文档啥的感觉没错,然后又添加证书, 三选一

    # provide a path to CA certs on disk
    ca_certs='/path/to/CA_certs',
    # PEM formatted SSL client certificate
    client_cert='/path/to/clientcert.pem',
    # PEM formatted SSL client key
    client_key='/path/to/clientkey.pem'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    毫无意外,又踩了一下,死活找不到路径。。。
    运维说最好忽略证书,那就放弃吧,继续面向google开发

    一顿搜索,试了几个不管用,也大致了解了为啥'verify_certs': False不生效, 好像是这个设置Flase,证书路径就是None,然后在某一步将None读取成了字符串

    最后找了个能用的方法记录下来

    import ssl
    from elasticsearch.connection import create_ssl_context
    
    ssl_context = create_ssl_context()
    ssl_context.check_hostname = False
    ssl_context.verify_mode = ssl.CERT_NONE
    
    WAGTAILSEARCH_BACKENDS = {
        'default': {
            'BACKEND': 'wagtail.search.backends.elasticsearch7',
            'URLS': ['https://user-name:pwd@10.xx.xx.104:9200'],
            'INDEX': 'wagtail_search',
            'TIMEOUT': 5,
            'OPTIONS': {
                'ssl_context': ssl_context,
                'use_ssl': True,
                'verify_certs': False,
            },
            'INDEX_SETTINGS': {},
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    【从零开始学zabbix】一丶Zabbix的介绍与部署Zabbix
    三维重建-第三方库介绍
    提升Java性能的优化细节
    计算机网络从三层交换机到路由器ospf
    Linux 忘记密码怎么办,CentOS和Ubuntu重置密码方法
    MySQL锁
    软考 系统架构设计师系列知识点之数字孪生体(3)
    基于javaweb的在线服装销售商城系统(java+springboot+vue+mysql)
    seaborn
    java入坑之类加载器
  • 原文地址:https://blog.csdn.net/qq_37049781/article/details/126546352