<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

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

    主站蜘蛛池模板: 无遮挡a级毛片免费看| 久久精品国产亚洲AV大全| 亚洲男人天堂2018av| 4399影视免费观看高清直播| 亚洲国产成人久久精品影视| 99视频精品全部免费观看| 久久精品国产亚洲AV麻豆网站 | 日亚毛片免费乱码不卡一区| 亚洲AⅤ无码一区二区三区在线| 亚洲AV无码国产剧情| 亚洲国模精品一区| 中国性猛交xxxxx免费看| 国产国拍精品亚洲AV片| 国内精品久久久久影院免费| 久久久国产精品亚洲一区| 97热久久免费频精品99| 亚洲欧洲无码AV不卡在线| 人人狠狠综合久久亚洲高清| 精品无码一级毛片免费视频观看| 亚洲码国产精品高潮在线| 91人成网站色www免费下载| 亚洲一日韩欧美中文字幕在线| 在线日韩av永久免费观看| 国产福利电影一区二区三区,免费久久久久久久精| 亚洲精品无码久久久久AV麻豆| 国产麻豆一精品一AV一免费| 亚洲小视频在线播放| 四虎成人精品在永久免费| 国色精品va在线观看免费视频 | 四虎永久成人免费影院域名| 久久不见久久见免费影院www日本 久久WWW免费人成—看片 | a级毛片免费全部播放| 亚洲特级aaaaaa毛片| 88xx成人永久免费观看| 亚洲一级免费视频| www.亚洲色图.com| 免费A级毛片无码A∨中文字幕下载 | 欧洲人成在线免费| 亚洲国产精品成人AV在线| 久久国产亚洲精品麻豆| 亚洲精品动漫免费二区|