NOTES
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:16k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. Quick notes:
  2. --------------------------------------------
  3. [tonu@x153 mysql-4.0]$ cat /etc/my.cnf
  4. [mysqld]
  5. ssl-ca=SSL/cacert.pem
  6. ssl-cert=SSL/server-cert.pem
  7. ssl-key=SSL/server-key.pem
  8.    
  9. [mysql]
  10. ssl-ca=SSL/cacert.pem
  11. ssl-cert=SSL/client-cert.pem
  12. ssl-key=SSL/client-key.pem
  13.      
  14. [mysqldump]
  15. ssl-ca=SSL/cacert.pem
  16. ssl-cert=SSL/client-cert.pem
  17. ssl-key=SSL/client-key.pem
  18.       
  19. [tonu@x153 mysql-4.0]$
  20. --------------------------------------------
  21. To remove passwords from keyfiles:
  22. [tonu@x153 SSL]$ openssl rsa -inform pem  < server-req.pem > server-key.pem
  23. read RSA key
  24. Enter PEM pass phrase:
  25. writing RSA key
  26. [tonu@x153 SSL]$
  27. --------------------------------------------
  28. To run server:
  29. sql/mysqld --ssl-ca=SSL/cacert.pem --ssl-cert=SSL/server-cert.pem --ssl-key=SSL/server-key.pem --skip-grant --debug='d:t:O,-' > /tmp/mysqld.trace
  30. --------------------------------------------
  31. To run client:
  32. client/mysql --ssl-ca=SSL/cacert.pem --ssl-cert=SSL/server-cert.pem --ssl-key=SSL/server-key.pem --debug='d:t:O,/tmp/client.trace' -h 127.0.0.1
  33. --------------------------------------------
  34. openssl s_client -host 127.0.0.1 -port 1111 -debug -verify 1 -cert ../SSL/client-cert.pem -key ../SSL/client-key.pem -CAfile ../SSL/cacert.pem -pause  -showcerts -state
  35. --------------------------------------------
  36. openssl s_server -port 1111 -cert ../SSL/server-cert.pem -key ../SSL/server-key.pem
  37. --------------------------------------------
  38. CA stuff:
  39. [tonu@x153 bin]$ pwd
  40. /usr/local/ssl/bin
  41. [tonu@x153 bin]$
  42. [tonu@x153 bin]$ ./CA.sh
  43. [tonu@x153 bin]$ ./CA.sh -h
  44. usage: CA -newcert|-newreq|-newca|-sign|-verify
  45. [tonu@x153 bin]$
  46. [root@x153 bin]# ./CA.sh -newca
  47. CA certificate filename (or enter to create)
  48. Making CA certificate ...
  49. Using configuration from /usr/lib/ssl/openssl.cnf
  50. Generating a 1024 bit RSA private key
  51. .++++++
  52. ................++++++
  53. writing new private key to './demoCA/private/./cakey.pem'
  54. Enter PEM pass phrase:
  55. Verifying password - Enter PEM pass phrase:
  56. phrase is too short, needs to be at least 4 chars
  57. Enter PEM pass phrase:
  58. Verifying password - Enter PEM pass phrase:
  59. -----
  60. You are about to be asked to enter information that will be incorporated
  61. into your certificate request.
  62. What you are about to enter is what is called a Distinguished Name or a DN.
  63. There are quite a few fields but you can leave some blank
  64. For some fields there will be a default value,
  65. If you enter '.', the field will be left blank.
  66. -----
  67. ountry Name (2 letter code) [AU]:FI
  68. State or Province Name (full name) [Some-State]:
  69. Locality Name (eg, city) []:Helsinki
  70. Organization Name (eg, company) [Internet Widgits Pty Ltd]:MySQL Finland AB
  71. Organizational Unit Name (eg, section) []:
  72. Common Name (eg, YOUR name) []:Tonu Samuel
  73. Email Address []:tonu@mysql.com
  74. [root@x153 bin]#
  75. [root@x153 bin]# ls -la demoCA/
  76. total 13
  77. drwxr-xr-x    6 root     root          232 Jun 24 18:50 ./
  78. drwxr-xr-x    3 root     root         2136 Jun 24 18:41 ../
  79. -rw-r--r--    1 root     root         1241 Jun 24 18:50 cacert.pem
  80. drwxr-xr-x    2 root     root           48 Jun 24 18:41 certs/
  81. drwxr-xr-x    2 root     root           48 Jun 24 18:41 crl/
  82. -rw-r--r--    1 root     root            0 Jun 24 18:44 index.txt
  83. drwxr-xr-x    2 root     root           48 Jun 24 18:41 newcerts/
  84. drwxr-xr-x    2 root     root           80 Jun 24 18:44 private/
  85. -rw-r--r--    1 root     root            3 Jun 24 18:44 serial
  86. [root@x153 bin]#
  87. [root@x153 bin]# ls -la demoCA/private/
  88. total 5
  89. drwxr-xr-x    2 root     root           80 Jun 24 18:44 ./
  90. drwxr-xr-x    6 root     root          232 Jun 24 18:50 ../
  91. -rw-r--r--    1 root     root          963 Jun 24 18:50 cakey.pem
  92. [root@x153 bin]#
  93. [root@x153 bin]# ./CA.sh -newreq
  94. Using configuration from /usr/lib/ssl/openssl.cnf
  95. Generating a 1024 bit RSA private key
  96. ..................++++++
  97. ........................++++++
  98. writing new private key to 'newreq.pem'
  99. Enter PEM pass phrase: <- new key password, not CA
  100. Verifying password - Enter PEM pass phrase:
  101. -----
  102. You are about to be asked to enter information that will be incorporated
  103. into your certificate request.
  104. What you are about to enter is what is called a Distinguished Name or a DN.
  105. There are quite a few fields but you can leave some blank
  106. For some fields there will be a default value,
  107. If you enter '.', the field will be left blank.
  108. -----
  109. Country Name (2 letter code) [AU]:EE
  110. State or Province Name (full name) [Some-State]:
  111. Locality Name (eg, city) []:Tallinn
  112. Organization Name (eg, company) [Internet Widgits Pty Ltd]:Noname
  113. Organizational Unit Name (eg, section) []:
  114. Common Name (eg, YOUR name) []:Mr Noname
  115. Email Address []:a@b.c
  116. Please enter the following 'extra' attributes
  117. to be sent with your certificate request
  118. A challenge password []:
  119. An optional company name []:
  120. Request (and private key) is in newreq.pem
  121. [root@x153 bin]#
  122. [root@x153 bin]# ls -la newreq.pem
  123. -rw-r--r--    1 root     root         1623 Jun 24 18:54 newreq.pem
  124. [root@x153 bin]#
  125. [root@x153 bin]# ./CA.sh -sign
  126. Using configuration from /usr/lib/ssl/openssl.cnf
  127. Enter PEM pass phrase: <- CA's one!
  128. Check that the request matches the signature
  129. Signature ok
  130. The Subjects Distinguished Name is as follows
  131. countryName           :PRINTABLE:'EE'
  132. stateOrProvinceName   :PRINTABLE:'Some-State'
  133. localityName          :PRINTABLE:'Tallinn'
  134. organizationName      :PRINTABLE:'Noname'
  135. commonName            :PRINTABLE:'Mr Noname'
  136. emailAddress          :IA5STRING:'a@b.c'
  137. Certificate is to be certified until Jun 24 15:50:23 2002 GMT (365 days)
  138. Sign the certificate? [y/n]:y
  139. 1 out of 1 certificate requests certified, commit? [y/n]y
  140. Write out database with 1 new entries
  141. Data Base Updated
  142. Certificate:
  143.     Data:
  144.         Version: 3 (0x2)
  145.         Serial Number: 1 (0x1)
  146.         Signature Algorithm: md5WithRSAEncryption
  147.         Issuer: C=FI, ST=Some-State, L=Helsinki, O=MySQL Finland AB, CN=Tonu Samuel/Email=tonu@mysql.com
  148.         Validity
  149.             Not Before: Jun 24 15:50:23 2001 GMT
  150.             Not After : Jun 24 15:50:23 2002 GMT
  151.         Subject: C=EE, ST=Some-State, L=Tallinn, O=Noname, CN=Mr Noname/Email=a@b.c
  152.         Subject Public Key Info:
  153.             Public Key Algorithm: rsaEncryption
  154.             RSA Public Key: (1024 bit)
  155.                 Modulus (1024 bit):
  156.                     00:ab:3b:7d:5b:6c:93:f6:46:1a:2c:46:73:6f:89:
  157.                     8a:99:bb:e9:6b:94:0d:74:aa:aa:c4:5c:a2:61:cf:
  158.                     56:bb:a1:a9:5a:37:c4:4e:b2:ec:5c:18:3a:a4:8d:
  159.                     af:3d:23:66:7c:85:7f:d1:f2:e3:fc:16:a7:4c:a2:
  160.                     d6:45:06:92:75:d8:a2:3b:f9:aa:77:da:26:b9:87:
  161.                     e0:df:50:54:e4:36:9f:35:87:39:8e:a6:7c:3e:a8:
  162.                     e4:49:1a:76:c2:6f:73:0b:22:93:2a:04:67:0d:7d:
  163.                     ae:34:5c:fe:7c:29:b8:a2:fe:1e:ef:d1:0c:4d:dd:
  164.                     5b:7a:67:b0:0a:22:88:a0:af
  165.                 Exponent: 65537 (0x10001)
  166.         X509v3 extensions:
  167.             X509v3 Basic Constraints: 
  168.                 CA:FALSE
  169.             Netscape Comment: 
  170.                 OpenSSL Generated Certificate
  171.             X509v3 Subject Key Identifier: 
  172.                 83:D1:0D:52:0F:DE:61:2D:A6:10:20:B8:46:0C:77:D5:D2:D0:BE:20
  173.             X509v3 Authority Key Identifier: 
  174.                 keyid:A5:0A:D6:72:B5:DF:E4:C2:2B:7B:07:5E:D3:4D:52:07:E1:83:6B:7F
  175.                 DirName:/C=FI/ST=Some-State/L=Helsinki/O=MySQL Finland AB/CN=Tonu Samuel/Email=tonu@mysql.com
  176.                 serial:00
  177.     Signature Algorithm: md5WithRSAEncryption
  178.         60:85:f7:d0:54:2a:67:88:0e:37:a6:a8:8e:fd:a0:c9:a1:d7:
  179.         c6:fc:4c:2e:59:8d:88:6d:69:0a:b8:b2:67:5f:81:94:39:0e:
  180.         ab:67:fc:8b:62:de:85:f6:b3:8c:2d:1a:e3:dc:28:fc:f5:99:
  181.         39:f0:3d:50:ca:88:c0:8e:f8:c2:02:5d:34:19:63:9f:c4:a2:
  182.         f6:a8:81:c9:8d:6d:bd:c4:42:4a:0c:49:5a:cc:24:ea:65:80:
  183.         dd:79:20:89:9e:ea:6b:80:7a:86:f9:bb:6d:24:3c:80:13:5b:
  184.         e6:16:fc:3d:8d:f6:16:ea:33:25:c6:90:20:81:a4:b0:15:2e:
  185.         9c:1c
  186. -----BEGIN CERTIFICATE-----
  187. MIIDfjCCAuegAwIBAgIBATANBgkqhkiG9w0BAQQFADCBhTELMAkGA1UEBhMCRkkx
  188. EzARBgNVBAgTClNvbWUtU3RhdGUxETAPBgNVBAcTCEhlbHNpbmtpMRkwFwYDVQQK
  189. ExBNeVNRTCBGaW5sYW5kIEFCMRQwEgYDVQQDEwtUb251IFNhbXVlbDEdMBsGCSqG
  190. SIb3DQEJARYOdG9udUBteXNxbC5jb20wHhcNMDEwNjI0MTU1MDIzWhcNMDIwNjI0
  191. MTU1MDIzWjBvMQswCQYDVQQGEwJFRTETMBEGA1UECBMKU29tZS1TdGF0ZTEQMA4G
  192. A1UEBxMHVGFsbGlubjEPMA0GA1UEChMGTm9uYW1lMRIwEAYDVQQDEwlNciBOb25h
  193. bWUxFDASBgkqhkiG9w0BCQEWBWFAYi5jMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
  194. iQKBgQCrO31bbJP2RhosRnNviYqZu+lrlA10qqrEXKJhz1a7oalaN8ROsuxcGDqk
  195. ja89I2Z8hX/R8uP8FqdMotZFBpJ12KI7+ap32ia5h+DfUFTkNp81hzmOpnw+qORJ
  196. GnbCb3MLIpMqBGcNfa40XP58Kbii/h7v0QxN3Vt6Z7AKIoigrwIDAQABo4IBETCC
  197. AQ0wCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQg
  198. Q2VydGlmaWNhdGUwHQYDVR0OBBYEFIPRDVIP3mEtphAguEYMd9XS0L4gMIGyBgNV
  199. HSMEgaowgaeAFKUK1nK13+TCK3sHXtNNUgfhg2t/oYGLpIGIMIGFMQswCQYDVQQG
  200. EwJGSTETMBEGA1UECBMKU29tZS1TdGF0ZTERMA8GA1UEBxMISGVsc2lua2kxGTAX
  201. BgNVBAoTEE15U1FMIEZpbmxhbmQgQUIxFDASBgNVBAMTC1RvbnUgU2FtdWVsMR0w
  202. GwYJKoZIhvcNAQkBFg50b251QG15c3FsLmNvbYIBADANBgkqhkiG9w0BAQQFAAOB
  203. gQBghffQVCpniA43pqiO/aDJodfG/EwuWY2IbWkKuLJnX4GUOQ6rZ/yLYt6F9rOM
  204. LRrj3Cj89Zk58D1QyojAjvjCAl00GWOfxKL2qIHJjW29xEJKDElazCTqZYDdeSCJ
  205. nuprgHqG+bttJDyAE1vmFvw9jfYW6jMlxpAggaSwFS6cHA==
  206. -----END CERTIFICATE-----
  207. Signed certificate is in newcert.pem
  208. [root@x153 bin]# ls -la demoCA/newcerts/
  209. total 5
  210. drwxr-xr-x    2 root     root           72 Jun 24 18:58 ./
  211. drwxr-xr-x    6 root     root          296 Jun 24 18:58 ../
  212. -rw-r--r--    1 root     root         3533 Jun 24 18:58 01.pem
  213. [root@x153 bin]#
  214. [root@x153 mysql-4.0]# ./sql/mysqld --ssl-cert=SSL/server-cert.pem --ssl-ca=SSL/cacert.pem --ssl-ke
  215. y=SSL/server-req.pem  -L /home/tonu/mysql-4.0/sql/share/english/ -u root
  216. Enter PEM pass phrase:
  217. ./sql/mysqld: ready for connections
  218. [tonu@x153 mysql-4.0]$ client/mysql --ssl-key=SSL/client-req.pem --ssl-ca=SSL/cacert.pem --ssl-cert
  219. =SSL/client-cert.pem
  220. Enter PEM pass phrase:
  221. ERROR:
  222. [tonu@x153 mysql-4.0]$
  223. -8<------------------------
  224. SSL encrypts data between MySQL server and client.
  225. You need openssl (formerly SSLeay) for MySQL SSL support. Development
  226. and testing was done on openssl version 0.9.3a 
  227. To compile MySQL one must do:
  228. ./configure --with-openssl=/usr  
  229. or
  230. ./configure --with-openssl=yes
  231. There are sample keys and certificates included with MySQL tarball in
  232. directory ./SSL. They are meant to be for quick start and 
  233. testing only. Using them in production environment means same as not
  234. using encryption. This is because private keys are publicly 
  235. accessible for everyone. You must use openssl distribution for new key
  236. and certificate generation for both client and server.
  237. ----------- for manual: ---------------------
  238. *New API calls:*
  239. mysql_ssl_set()                 - Set SSL properties (key, certificate,
  240. certificates authority certificate). Must be called before
  241. mysql_real_connect();
  242. mysql_ssl_clear()               - Clear and free resources occupied by
  243. mysql_ssl_set() API call.
  244. char *mysql_ssl_cipher(MYSQL *) - returns cipher in use. For example
  245. "DES-CDC3-SHA" means that you have combined triple DES symmetric
  246. algorithm and SHA
  247. hashing algorithm. 
  248. *New command line switches:*
  249. --ssl            Use SSL for connection (automatically set with
  250. other flags. This means one can use encrypted connection without strong
  251. cryptological authentication. Normally one must use all switches
  252. together including ssl-key, ssl-cert and ssl-ca and never mind about
  253. --ssl because this is assumed by defult if any of them (--ssl-...)
  254. included.
  255. --ssl-key        X509 key in PEM format (implies --ssl)
  256. --ssl-cert       X509 cert in PEM format (implies --ssl)
  257. --ssl-ca         CA file in PEM format (check OpenSSL docs,
  258. implies --ssl)
  259. --ssl-capath     CA directory (check OpenSSL docs, implies --ssl
  260.             ----------------
  261.     This is about using SSL in MySQL privilege system. My idea is to make 
  262. possible use of x509 certificates and keys instead of MySQL native
  263. passwords
  264. Some basic theory about crypt, SSL and x509:
  265. x509 is standard for certificates. SSL is standard for secure
  266. communication. Certificates are issued by someone anyone can trust. This
  267. trusted party is called "Certificate Authority" or "CA". This is
  268. someone, we MUST trust. Everyone must have some "fingerprint" of CA (so
  269. called "CA certificate" or "CA cert") using which one can verify
  270. authenticity of other 
  271. certificates issued by this CA. CA uses his power to give certificates
  272. to persons (they can be physical (like "monty") or logical (like some
  273. process). Person is identified by "subject" like
  274. "/C=EE/ST=Harjumaa/L=Tallinn/O=MySQL client bogus certificate/CN=Tonu
  275. Samuel/Email=<EMAIL: PROTECTED>". and signed cryptologically. This sign can be
  276. verified using CA-cert. So, if we trust CA, then we can trust identity
  277. of user.
  278. There can be many CA-s (usually not but who knows). Also there can be
  279. some users we don`t trust or have different privileges. This means we
  280. must have one table to hold CA-certs and other table to hold so called
  281. "subjects" (users). I think it`s a good idea to use existing structure
  282. of host/user/db/field and add some x509 relationship. Then we can
  283. use usual simple user/host pair or x509 subject/CA pair. 
  284. So I think user must grant rights using old method GRANT blabla ON
  285. blabla TO blabla IDENTIFIED BY blabla
  286. or new way:
  287. -----------8<---------------------------
  288. GRANT blabla ON blabla TO blabla 
  289. IDENTIFIED BY X509 SUBJECT "/C=EE/ST=Harjumaa/L=Tallinn/O=MySQL client
  290. bogus certificate/CN=Tonu Samuel/Email=<EMAIL: PROTECTED>" AND ISSUER
  291. "/C=EE/ST=Harjumaa/L=Tallinn/O=TCX AB/CN=Tonu
  292. Samuel/Email=<EMAIL: PROTECTED>";
  293. -----------8<---------------------------
  294. Please note the difference in Subject and Issuer. This command requests
  295. user to authenticate itself with exact subject and exact certificate
  296. issuer. Next possibility is just have any certificate of some good CA:
  297. -----------8<---------------------------
  298. GRANT blabla ON blabla TO blabla IDENTIFIED BY X509 ISSUER
  299. "/C=EE/ST=Harjumaa/L=Tallinn/O=TCX
  300. AB/CN=Tonu Samuel/Email=<EMAIL: PROTECTED>";
  301. -----------8<---------------------------
  302. or if any registered CA is good enough (usual case when only one CA is
  303. registered) 
  304. but we care about exact user, then something like: 
  305. -----------8<---------------------------
  306. GRANT blabla ON blabla TO blabla IDENTIFIED BY X509 SUBJECT
  307. "/C=EE/ST=Harjumaa/L=Tallinn/O=MySQL client
  308. bogus certificate/CN=Tonu Samuel/Email=<EMAIL: PROTECTED>";
  309. -----------8<---------------------------
  310. And case if user must authenticate itself but we don`t care about exact 
  311. person until he have some certificate issued by CA registered in our
  312. system:
  313. -----------8<---------------------------
  314. GRANT blabla ON blabla TO blabla IDENTIFIED BY X509;
  315. -----------8<---------------------------
  316. Then additionally we need one exception. Let`s assume we need SSL
  317. encryption 
  318. for preventing eavesdropping but we don`t care who it is at all. We need 
  319. privilege to exclude all non-SSL users but we accept anyone using SSL.
  320. How 
  321. this must be done in GRANT syntax? Maybe:
  322. -----------8<---------------------------
  323. GRANT blabla ON blabla TO blabla 
  324. IDENTIFIED BY blabla AND USING SSL
  325. -----------8<---------------------------
  326. But maybe we want to add in future possibility to check different
  327. algorithms and key lengths? Something like:
  328. -----------8<---------------------------
  329. GRANT blabla ON blabla TO blabla IDENTIFIED BY blabla AND USING SSL WITH
  330. CIPHER "DES-CBC3-SHA" OR "DES-CBC3-MD5"
  331. -----------8<---------------------------
  332. Also we need some command to include/exclude CA certificates. This must
  333. be some commands like INSERT/DELETE/UPDATE/REPLACE to do it. 
  334. All examples is given for clarify my problem. I asking for help because
  335. I don`t know
  336. any similar command in other SQL-s. 
  337. ------------8<------------------------
  338. So, at moment SSL communications is ready and working. I don`t have this
  339. command iterface at moment yet and this can be changed a lot if someone
  340. can suggest good idea or reason to change them. We are ready to listen
  341. every opinion. 
  342. About Kerberos: I just don`t know much about it. I have to read this
  343. again before I can comment. I never used it itself and forgot most of
  344. theory. Sorry. Anyway now the problem/need is known and I will put
  345. thinking about this in personal TODO.