簡體   English   中英

使用 pythonanywhere ssl 證書的隱私錯誤

[英]Privacy error using pythonanywhere ssl certificate

我的網絡應用程序中有一個支付網關,需要SSL證書才能正常工作。

該網絡應用程序是托管在pythonanywhere的 django 網絡應用程序。 我使用他們的Auto-renewing Let's Encrypt certificate來添加 SSL 證書,並使網站加載為HTTPS網站。

該網站現在加載為HTTPS網站,但是在退出支付網關時,我仍然收到如下隱私錯誤

Your connection is not private
Attackers might be trying to steal your information from <my domain> (for example, passwords, messages or credit cards). Learn more
NET::ERR_CERT_COMMON_NAME_INVALID

我不確定我做錯了什么

[編輯-1]

  1. 我正在使用從 GoDaddy 購買的自定義域
  2. 我按照此鏈接設置 SSL 證書
  3. 我還在 pythonanywhere 中啟用了強制 https
  4. 我在我的視圖中將回調 url 從http://<my_domain>.org/payment/status/更改為https://<my_domain>.org/payment/status/
  5. 回調 url 頁面不包含任何 http 鏈接。 只是一個 css 文件如下<link rel="stylesheet" href="{% static 'css/paymentstatus.css' %}">

請注意,當我訪問該網站時,它顯示為https 只有在調用回調 URL 時才會返回隱私錯誤。

當我使用ngrok在本地系統中嘗試它時,我沒有遇到此錯誤。 此錯誤僅發生在pythonanywhere中。

[編輯-2]

nslookup mydomain.org

▶ nslookup mydomain.org
Server:     2405:201:e011:3804::c0a8:1d01
Address:    2405:201:e011:3804::c0a8:1d01#53

Non-authoritative answer:
Name:   mydomain.org
Address: IP_ADDRESS

dig mydomain.org

▶ dig mydomain.org
; <<>> DiG 9.10.6 <<>> mydomain.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8056
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;mydomain.org.      IN  A

;; ANSWER SECTION:
mydomain.org.   225 IN  A   IP_ADDRESS

;; Query time: 2 msec
;; SERVER: 2405:201:e011:3804::c0a8:1d01#53(2405:201:e011:3804::c0a8:1d01)
;; WHEN: Fri Jan 15 14:18:23 IST 2021
;; MSG SIZE  rcvd: 51

[編輯-3]

我將 url 從https://<my_domain>.org/更改為https://www.<my_domain>.org/ 這會導致 404 錯誤。 我在下面添加了我的 views.py 和 url.py

視圖.py

def donate(request):
    if request.method == "POST":
        form = DonateForm(request.POST)

        name = request.POST.get('firstName')
        phone = request.POST.get('phone')
        email = request.POST.get('email')
        amount = float("{0:.2f}".format(int(request.POST.get('amount'))))
        ord_id = OrdID()
        cust_id = CustID()

        paytm_params = {
            "MID" : MERCHANTID,
            "WEBSITE" : "DEFAULT",
            "INDUSTRY_TYPE_ID" : "Retail",
            "CHANNEL_ID" : "WEB",
            "ORDER_ID" : ord_id,
            "CUST_ID" : cust_id,
            "MOBILE_NO" : phone,
            "EMAIL" : email,
            "TXN_AMOUNT" : str(amount),
            "CALLBACK_URL" : "https://www.<my_domain>.org/payment/status/",

            }

        paytm_params['CHECKSUMHASH'] = Checksum.generate_checksum(paytm_params, MERCHANTKEY)

        if form.is_valid():
            form.save()

        return render(request, 'paytm.html', {'paytm_params': paytm_params})

    else:
        form = DonateForm()
        context = {'Donate': form}
        return render(request, 'donate.html', context=context)

@csrf_exempt
def handlerequest(request):
    if request.method == "POST":
        form = request.POST
        response_dict = {}

        for i in form.keys():
            response_dict[i] = form[i]

            if i == 'CHECKSUMHASH':
                checksum = form[i]
                print(checksum)

        verify = Checksum.verify_checksum(response_dict, MERCHANTKEY, checksum)

        if verify:
            if response_dict['RESPCODE'] == '01':
                print('order successful')
            else:
                print('error: ' + response_dict['RESPMSG'])

        return render(request, 'paymentstatus.html', {'response': response_dict})

網址.py

urlpatterns = [

    ...

    path('donate', views.donate, name='donate'),
    path('payment/status', views.handlerequest, name='handlerequest'),

    ...
]

[解決方案]

首先是www. 到 url 的答案表明是問題所在。 404錯誤就這樣解決了。

結果是視圖中的路徑和 urls 中的路徑應該是相同的。 這為我解決了這個問題。


def donate(request):

    ...

    paytm_params = {
            "MID" : MERCHANTID,
            "WEBSITE" : "DEFAULT",
            "INDUSTRY_TYPE_ID" : "Retail",
            "CHANNEL_ID" : "WEB",
            "ORDER_ID" : ord_id,
            "CUST_ID" : cust_id,
            "MOBILE_NO" : phone,
            "EMAIL" : email,
            "TXN_AMOUNT" : str(amount),
            "CALLBACK_URL" : "https://www.<my_domain>.org/payment/status",
    
    ...

網址.py

urlpatterns = [

    ...

    path('donate', views.donate, name='donate'),
    path('payment/status', views.handlerequest, name='handlerequest'),

    ...
]

請注意,在 urls.py 中,路徑如下payment/status 以前在視圖中,路徑最后有一個斜杠,例如https://www.<my_domain>.org/payment/status/ 最后刪除斜線對我有用。

如果您的站點是在 PythonAnywhere 上設置的,它可能位於https://www.<my_domain>.org/ ,而不是https://<my_domain>.org/ 因此,如果您的回調 URL 不包括www. 一開始,然后嘗試添加它,看看是否能解決問題。

我現在只是猜測:

  • DNS 需要一些時間與支付提供商 DNS 數據庫一起傳播

航站樓內

# check NS record
nslookup yourdomain.org
# try to force refresh for few times
dig yourdomain.org

請分享 output

  • 或者我最關心的是您使用 CDN 服務或加載在 https 內的 http 上提供的資產

  • 在瀏覽器中點擊鎖定圖標並檢查證書,如果一切正常,您必須再次聯系他們的支持人員以強制刷新他們的 DNS,通常需要一段時間才能自動工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM