<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    stone2083

    SSL相關命令隨記

    背景
    之前利用笨重的Java寫過內網訪問程序(SSL雙向認證系統),今天才發現curl等命令對SSL都有良好的支持。
    故記錄相關點滴。

    創建CA根證書

    #創建ca私鑰
    openssl genrsa -out ca.key
    #創建證書請求文件(Certificate Secure Request)
    openssl req -new -key ca.key -out ca.csr

    #創建CA根證書
    openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt

    創建服務器證書
    #創建服務器私鑰

    openssl genrsa -out server.key

    #創建服務器證書請求文件
    openssl req -new -key server.key -out server.csr

    #創建服務器證書
    openssl ca -in server.csr -cert ca.crt -keyfile ca.key -out server.crt

    PFX證書轉換
    #pfx格式證書導出成pem格式證書

    openssl pkcs12 -in jinli.pfx -nodes -out jinli.pem
    #導出私鑰
    openssl rsa -in jinli.pem -out jinli.key
    #導出證書,公鑰
    openssl x509 -in jinli.pem -out jinli.crt


    curl訪問HTTPS命令
    curl -E jinli.pem:${password} --cacert ca.crt https://www.cn.alibaba-inc.com/
    curl --cacert gmail.pem https://mail.google.com/mail
    curl --cert jinli.crt --key jinli.key --cacert ca.crt https://www.cn.alibaba-inc.com/
    參數解釋
        --cacert <file> CA certificate to verify peer against (SSL)
        --capath 
    <directory> CA directory to verify peer against (SSL)
     -E/--cert 
    <cert[:passwd]> Client certificate file and password (SSL)
        --cert-type 
    <type> Certificate file type (DER/PEM/ENG) (SSL)
        --key 
    <key>     Private key file name (SSL/SSH)

        --key-type 
    <type> Private key file type (DER/PEM/ENG) (SSL)

    python訪問HTTPS代碼
    from httplib import HTTPSConnection

    con 
    = HTTPSConnection('www.cn.alibaba-inc.com', cert_file='jinli.pem')
    con.connect()
    con.request(
    'GET''/xxx')
    res 
    = con.getresponse()
    print res.status
    print res.read()
    res.close()
    con.close()

    python查看證書信息代碼
    from OpenSSL import crypto
    x509 
    = crypto.load_certificate(crypto.FILETYPE_PEM, open('cert_file').read())
    print x509.get_issuer()

    pkcs 
    = crypto.load_pkcs12(open(pkcs_file).read(),passphrase)
    print pkcs.get_certificate().get_issuer()

     

    HTTPSConnection不理解的地方 

    def wrap_socket(sock, keyfile=None, certfile=None,
                    server_side
    =False, cert_reqs=CERT_NONE,
                    ssl_version
    =PROTOCOL_SSLv23, ca_certs=None,
                    do_handshake_on_connect
    =True,
                    suppress_ragged_eofs
    =True, ciphers=None):

        
    return SSLSocket(sock, keyfile=keyfile, certfile=certfile,
                         server_side
    =server_side, cert_reqs=cert_reqs,
                         ssl_version
    =ssl_version, ca_certs=ca_certs,
                         do_handshake_on_connect
    =do_handshake_on_connect,
                         suppress_ragged_eofs
    =suppress_ragged_eofs,
                         ciphers
    =ciphers)

     

    ssl wrap的函數是支持ca_certs參數的,但是HTTPSConnection不支持ca_certs參數
    class HTTPSConnection(HTTPConnection):
            
    "This class allows communication via SSL."

            default_port 
    = HTTPS_PORT

            
    def __init__(self, host, port=None, key_file=None, cert_file=None,
                         strict
    =None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
                         source_address
    =None):
                HTTPConnection.
    __init__(self, host, port, strict, timeout,
                                        source_address)
                self.key_file 
    = key_file
                self.cert_file 
    = cert_file

            
    def connect(self):
                
    "Connect to a host on a given (SSL) port."

                sock 
    = socket.create_connection((self.host, self.port),
                                                self.timeout, self.source_address)
                
    if self._tunnel_host:
                    self.sock 
    = sock
                    self._tunnel()
                self.sock 
    = ssl.wrap_socket(sock, self.key_file, self.cert_file)






    posted on 2011-10-17 20:22 stone2083 閱讀(3312) 評論(2)  編輯  收藏 所屬分類: python

    Feedback

    # re: SSL相關命令隨記 2011-10-17 22:04 tbw

    不錯 學習了   回復  更多評論   

    # re: SSL相關命令隨記 2013-09-16 17:13 guojian

    不錯,學習了  回復  更多評論   

    主站蜘蛛池模板: 成人毛片手机版免费看| 免费国产成人18在线观看| 在线视频免费观看高清| 亚洲经典在线观看| 午夜网站在线观看免费完整高清观看| 亚洲综合区小说区激情区 | 久久精品亚洲综合专区| 一级做a爰片性色毛片免费网站| 免费人成在线观看网站品爱网日本 | 亚洲AV本道一区二区三区四区| 国产日韩AV免费无码一区二区三区 | 亚洲一区在线观看视频| 免费一本色道久久一区| 亚洲AV无码一区二区三区牲色 | 久久亚洲国产精品123区| 两性色午夜免费视频| 亚洲国产精品乱码一区二区| 一级毛片成人免费看免费不卡 | 亚洲一区二区在线视频| 在线看片v免费观看视频777| 亚洲欧美精品午睡沙发| 无码欧精品亚洲日韩一区| 国产精品99久久免费观看| 亚洲伊人久久精品| 免费少妇a级毛片| 热99RE久久精品这里都是精品免费| 亚洲一区影音先锋色资源| 中文字幕无码视频手机免费看| 久久无码av亚洲精品色午夜| 最新精品亚洲成a人在线观看| 99久9在线|免费| 久久亚洲色WWW成人欧美| 国产亚洲一区二区三区在线不卡| 99re免费视频| 国产精品国产亚洲区艳妇糸列短篇| 国产亚洲精品影视在线产品| 黄页网站免费在线观看| 一区二区3区免费视频| 亚洲成a人片在线观看中文!!!| 日韩免费视频播播| 色欲A∨无码蜜臀AV免费播|